每一个COM控件都有一个全球唯一的标识,CoClass的GUID,简称CLSID;

  每一个COM控件注册后,都会在注册表中的 “HKEY_CLASSES_ROOT\CLSID”键下创建一个以COM控件的CLSID命名的键(带大括号),所以判断一个COM控件是否注册,可在 “HKEY_CLASSES_ROOT\CLSID”键下查看是否存在以该COM控件的CLSID命名的注册表键。代码如下:

  

 1  /// <summary>
 2         /// 检查指定CLSID的COM控件是否注册
 3         /// </summary>
 4         /// <param name="clsid">COM控件的CLSID,不带大括号</param>
 5         /// <returns>是否已经注册</returns>
 6         public static bool GetRegisterStatus(string clsid)
 7         {
 8             bool hasRegister = false;
 9             RegistryKey root = RegistryKey.OpenBaseKey(RegistryHive.ClassesRoot, RegistryView.Registry32);
10             string cld = String.Format("\\CLSID\\{0}{1}{2}", "{", clsid, "}");
11             RegistryKey comKey = root.OpenSubKey(cld);
12             hasRegister = comKey != null;
13             return hasRegister;
14         }

  在每一个已注册的COM控件对应的注册表键下,都会保存其文件信息,可能会保存版本信息和其他信息,所以可以从注册表中获取该COM控件的文件所在位置。如下所示:

 1        /// <summary>
 2         /// 检查指定CLSID的COM控件是否注册,并返回文件信息
 3         /// </summary>
 4         /// <param name="clsid">COM控件的CLSID,不带大括号</param>
 5         /// <param name="file">文件信息</param>
 6         /// <returns>是否已经注册</returns>
 7         public static bool GetRegisterStatus(string clsid, out FileInfo file)
 8         {
 9             file = null;
10             RegistryKey root = RegistryKey.OpenBaseKey(RegistryHive.ClassesRoot, RegistryView.Registry32);
11             string cld = String.Format("\\CLSID\\{0}{1}{2}", "{", clsid, "}");
12             RegistryKey comKey = root.OpenSubKey(cld);
13             if (comKey == null) return false;
14
15             RegistryKey fileKey = comKey.OpenSubKey("InprocServer32");
16             if (fileKey == null) return false;
17             string filename = fileKey.GetValue("").ToString();
18             if (!string.IsNullOrEmpty(filename))
19             {
20                 file = new FileInfo(filename);
21             }
22             return true;
23         }

关于COM控件的注册方法,可调用系统文件夹(system32)下的Regsvr32.exe来注册。

具体使用方法为:创建一个进程,运行Regsvr32文件,再将注册和反注册选项,文件信息等作为运行参数,然后启动进程即可。进程运行结束后,可采用上述方法来验证是否完成注册或反注册。

创建进程:

 1         /// <summary>
 2         /// 根据指定的文件名创建一个运行Regsvr32的Process
 3         /// </summary>
 4         /// <param name="filename">文件绝对路径</param>
 5         /// <param name="register">注册/反注册</param>
 6         /// <returns></returns>
 7         private static Process GetRegsvr32(string filename, bool register)
 8         {
 9             if (!File.Exists(filename)){ return null;}
10             Process p = new Process();
11             p.StartInfo.FileName = string.Format("{0}\\{1}", Environment.GetFolderPath(Environment.SpecialFolder.System),
12                 "regsvr32.exe");
13             p.StartInfo.Arguments = string.Format("/s {0}", filename);
14             if (!register)
15             {
16                 p.StartInfo.Arguments += " /u";
17             }
18
19             return p;
20         }

转载于:https://www.cnblogs.com/pengcwl/p/3412084.html

C# 获取COM控件注册状态,注册以及反注册COM控件相关推荐

  1. java 判断ocx是否存在_OCX控件的注册卸载,以及判断是否注册

    方法一:在dos或Windows命令行下运行:regsvr32 ocxname.ocx 注册 示例: regsvr32 netshare.ocx     //注册netshare.ocx控件 regs ...

  2. 做VB的,经常注册和反注册OCX控件和DLL链

    做VB的,经常注册和反注册OCX控件和DLL链 但是,每次都要 "开始"--"运行" --"regsvr32 C:\********\******.o ...

  3. OCX控件的注册卸载,以及判断是否注册

    方法一:在dos或Windows命令行下运行:regsvr32 ocxname.ocx 注册 示例: regsvr32 netshare.ocx     //注册netshare.ocx控件 regs ...

  4. 二级VB培训笔记06:窗体与常用控件综合案例【个人信息注册】

    二级VB培训笔记06:窗体与常用控件综合案例[个人信息注册] 一.常用控件属性与方法思维导图 二.综合案例--个人信息注册 1.创建工程,修改名称为"个人信息注册",窗体名称设置为 ...

  5. ActiveX控件的注册和反注册

    一:用MFC生成的ActiveX控件,需要注册之后才能使用. 注意:注册与反注册都需要管理员权限,才能操作成功. 注册命令:regsvr32 "E:\Clock.ocx" 反注册命 ...

  6. 操作ocx控件和注册反注册ocx

    查看OCX控件的API: 通过OLE-COM Object Viewer工具查看ocx里面的函数声明.此工具一般在visual studio IDE的工具扩展中找到.也有独立小程序可以下载. DOS常 ...

  7. windows上注册控件/反注册控件

    1.注册控件 regsvr32 c:\mydll.dll 2.反注册控件 regsvr32 /u c:\mydll.dll 3.在注册表中清除注册信息         搜索 mydll.dll 找到之 ...

  8. ajax获取单选按钮的值_【自学C#】|| 笔记 31 控件,按钮

    一.Button:按钮控件 按钮主要用于提交页面的内容,或者是确认某种操作等.     按钮常用的属性包括在按钮中显示的文字 (Text) 以及按钮外观设置的属性,最常用的事件是单击事件. 1.例: ...

  9. c#winform演练 ktv项目 关注MediaPlayer控件的状态

    c#winform演练 ktv项目 关注MediaPlayer控件的状态 获取媒体控件的状态 一般情况下需要int类型的值,用于方便的判断 (int)媒体控件.playState 例子 弹出媒体控件的 ...

最新文章

  1. 天津财经计算机专业研究生分数线,天津财经大学各专业2015—2020年硕士研究生复试分数线汇总...
  2. powerpoint预览_如何放大和缩小PowerPoint演示文稿的一部分
  3. python ---单例(Singleton)
  4. java邮件附件名称乱码_Javamail 中附件中文名字乱码祥解 (转)
  5. 大数据之-Hadoop3.x_MapReduce_序列化案例FlowBean---大数据之hadoop3.x工作笔记0097
  6. java 执行oracle 存储过程_oracle--在java中调用存储过程和存储函数
  7. python time模块计时_python中计时模块timeit的使用方法
  8. vue学习(十五) 过滤器简单实用
  9. Python 语言程序设计(5-3) 代码复用与函数递归
  10. WebSite设置首页或是加入收藏夹功能
  11. 数据库性能指标 2005-04-06 19:36:14(转载)
  12. [UnityShader3]去色效果
  13. 松下plc安装序列号afpsgr7_《松下PLC 编程软件 FPWINGR7 操作手册 中文高清版》.pdf...
  14. 2.人工智能与机器学习的关系
  15. 【原创】PC微信逆向分析の强制输出微信调式信息
  16. 077 三角函数定积分性质
  17. 使用U盘制做CentOS7.6安装盘并安装CentOS7.6系统
  18. 微信小程序——读取显示用户头像昵称
  19. DIV布局强制英文换行(div英文不怎么给力啊~ 只有用别的方法啦)
  20. Navicat for MySQL 安装以及初始创建连接,新建数据表

热门文章

  1. 十分钟学习python_Python学习笔记一:十分钟入门
  2. vplex实施手册_VPLEX 运维及异构存储双活使用实例技术 | 在线答疑
  3. python的书籍推荐_python 书籍推荐
  4. 没有varselect这个函数_JavaScript学习笔记(四)-- 函数基础
  5. 手把手教你使用python爬取网络图片并存入本地
  6. python3.7读取csv文件_Python3 读取csv文件
  7. android edittext最多输入,android 中如何限制 EditText 最大输入字符数
  8. 服务器上把计算机放桌面,远程服务器这么显示在电脑桌面
  9. 加密芯片——AES算法特点与应用注意事项
  10. 微软公告:Visual Basic 6 完全兼容 Windows 8 的整个产品周期