C#检测ocx控件是否注册

  接着上一篇《C#程序检测指定计算机端口是否打开》,程序除了判断调用的WebService端口是否打开外,还需要判断程序运行过程中使用的ocx控件是否在用户计算机中注册,包括office浏览控件、dwg浏览控件、签名控件等。
  控件有多种注册方式,可以在控件安装过程中自动注册控件,可以通过命令行使用regsvr32命令手动注册控件,也可以将多个控件的注册命令写成批处理文件批量注册控件。
  控件注册后,会在注册表HKEY_CLASSES_ROOT\CLSID下创建一个其唯一标识为名称的子项
在这里插入图片描述
  如果是32位的控件,则以其唯一标识为名称的注册表项放在了HKEY_CLASSES_ROOT\WOW6432Node\CLSID下面。
在这里插入图片描述
  根据参考文献,常用的检测方式有以下几种(这里主要列出了2种):

1、创建实例

  这种方式实现比较简单,基本不用增加额外的代码,就是在程序使用ocx对象的模块中会存在创建控件实例的语句,如果控件没有注册,则会在程序运行过程中报控件未注册的错误提示。
  这种情况在日常运维中经常碰到。有些用户安装程序时没有仔细看安装说明,则在使用过程中就会碰到控件未注册的错误。

2、查询注册表

  可以通过判断HKEY_CLASSES_ROOT\CLSID下是否存在指定ID的子项来确定控件是否注册。

   string key = String.Format(@"CLSID\{{{0}}}", txtID.Text);
   Microsoft.Win32.RegistryKey Regkey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(key);
   if (Regkey != null)
   {
       MessageBox.Show("控件已注册");
   }
   else
   {
       MessageBox.Show("控件未注册");
   }

  以福熙控件为例介绍一下检测过程。首先是查看福熙控件的CLSID,可以从注册表中找(参考文献4),也可以用OLEVIEW.exe查看(参考文献5)。本文使用后者。
  打开oleview,在controls分组下选中福熙控件节点,在右侧就可以看到其CLSID。
在这里插入图片描述  在检测程序中输入控件CLSID,然后点击检测按钮,即可查看控件注册状态。
在这里插入图片描述
  最后还要说明一点,测试程序开始几次运行时一直提示控件未注册,调试代码发现查找注册表时返回结果为空。后来才意识到可能是因为是32位控件,其信息路径是在HKEY_CLASSES_ROOT\WOW6432Node\CLSID下面。将程序编译为X86,再运行检测程序,即可正常检测。

参考文献:
[1]http://blog.sina.com.cn/s/blog_752ca76a0100ugjo.html
[2]https://www.xin3721.com/ArticlecSharp/c13779.html
[3]https://www.cnblogs.com/virqin/archive/2012/06/05/2537430.html
[4]https://bbs.csdn.net/topics/340205570
[5]https://blog.csdn.net/glblove1986/article/details/103710296/?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-2&spm=1001.2101.3001.4242

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值