打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C# 获取COM控件注册状态,注册以及反注册COM控件

  每一个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         }

 

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C#设置开机启动
.NET开发不可不知、不可不用的辅助类(一)
C#程序关联文件、系统右键、跨进程消息
C#综合揭秘
pb插入ole控件点击insert control时pb应用程序自动关闭解决思路
VS2010 C#创建ActiveX控件
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服