C# 获取COM控件注册状态,注册以及反注册COM控件
2013-11-07 11:10
417 查看
每一个COM控件都有一个全球唯一的标识,CoClass的GUID,简称CLSID;
每一个COM控件注册后,都会在注册表中的 “HKEY_CLASSES_ROOT\CLSID”键下创建一个以COM控件的CLSID命名的键(带大括号),所以判断一个COM控件是否注册,可在 “HKEY_CLASSES_ROOT\CLSID”键下查看是否存在以该COM控件的CLSID命名的注册表键。代码如下:
在每一个已注册的COM控件对应的注册表键下,都会保存其文件信息,可能会保存版本信息和其他信息,所以可以从注册表中获取该COM控件的文件所在位置。如下所示:
关于COM控件的注册方法,可调用系统文件夹(system32)下的Regsvr32.exe来注册。
具体使用方法为:创建一个进程,运行Regsvr32文件,再将注册和反注册选项,文件信息等作为运行参数,然后启动进程即可。进程运行结束后,可采用上述方法来验证是否完成注册或反注册。
创建进程:
每一个COM控件注册后,都会在注册表中的 “HKEY_CLASSES_ROOT\CLSID”键下创建一个以COM控件的CLSID命名的键(带大括号),所以判断一个COM控件是否注册,可在 “HKEY_CLASSES_ROOT\CLSID”键下查看是否存在以该COM控件的CLSID命名的注册表键。代码如下:
/// <summary> /// 检查指定CLSID的COM控件是否注册 /// </summary> /// <param name="clsid">COM控件的CLSID,不带大括号</param> /// <returns>是否已经注册</returns> public static bool GetRegisterStatus(string clsid) { bool hasRegister = false; RegistryKey root = RegistryKey.OpenBaseKey(RegistryHive.ClassesRoot, RegistryView.Registry32); string cld = String.Format("\\CLSID\\{0}{1}{2}", "{", clsid, "}"); RegistryKey comKey = root.OpenSubKey(cld); hasRegister = comKey != null; return hasRegister; }
在每一个已注册的COM控件对应的注册表键下,都会保存其文件信息,可能会保存版本信息和其他信息,所以可以从注册表中获取该COM控件的文件所在位置。如下所示:
/// <summary> /// 检查指定CLSID的COM控件是否注册,并返回文件信息 /// </summary> /// <param name="clsid">COM控件的CLSID,不带大括号</param> /// <param name="file">文件信息</param> /// <returns>是否已经注册</returns> public static bool GetRegisterStatus(string clsid, out FileInfo file) { file = null; RegistryKey root = RegistryKey.OpenBaseKey(RegistryHive.ClassesRoot, RegistryView.Registry32); string cld = String.Format("\\CLSID\\{0}{1}{2}", "{", clsid, "}"); RegistryKey comKey = root.OpenSubKey(cld); if (comKey == null) return false; RegistryKey fileKey = comKey.OpenSubKey("InprocServer32"); if (fileKey == null) return false; string filename = fileKey.GetValue("").ToString(); if (!string.IsNullOrEmpty(filename)) { file = new FileInfo(filename); } return true; }
关于COM控件的注册方法,可调用系统文件夹(system32)下的Regsvr32.exe来注册。
具体使用方法为:创建一个进程,运行Regsvr32文件,再将注册和反注册选项,文件信息等作为运行参数,然后启动进程即可。进程运行结束后,可采用上述方法来验证是否完成注册或反注册。
创建进程:
/// <summary> /// 根据指定的文件名创建一个运行Regsvr32的Process /// </summary> /// <param name="filename">文件绝对路径</param> /// <param name="register">注册/反注册</param> /// <returns></returns> private static Process GetRegsvr32(string filename, bool register) { if (!File.Exists(filename)){ return null;} Process p = new Process(); p.StartInfo.FileName = string.Format("{0}\\{1}", Environment.GetFolderPath(Environment.SpecialFolder.System), "regsvr32.exe"); p.StartInfo.Arguments = string.Format("/s {0}", filename); if (!register) { p.StartInfo.Arguments += " /u"; } return p; }
相关文章推荐
- C#实现Bitmap旋转
- C#打开xml,并绑定TreeView
- C#打开文件,文件夹
- c# is as 和强制类型转换
- C# 路由器互动操作
- .NET(c#)new关键字的三种用法
- c#中的readonly和const
- C# 调用父窗体的方法
- C#中base的用法
- C#操控 条形码扫描枪
- Print2flash在.NET(C#)64位中的使用,即文档在线预览
- C#读取Excel遇到无法读取的解决方法
- C#数组基础
- C# WinForm 如何设置窗体背景为渐变色
- C# objiect 转int类型
- C# WinForm 模态对话框与非模态对话框的区别
- c#之接口
- C# 委托和Lambda表达式
- C# 同步调用、异步调用、异步回调
- C# WinForm 实现窗体渐显效果