请选择 进入手机版 | 继续访问电脑版

C#检测ocx控件是否注册

[复制链接]
科达工艺 发表于 2021-1-2 19:44:50 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
  接着上一篇《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的子项来确定控件是否注册。
  1.    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

来源:https://blog.csdn.net/gc_2299/article/details/111398108
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )