接着上一篇《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

C#检测ocx控件是否注册相关推荐

  1. win10 OCX控件的注册

    win10 OCX控件的注册 在win10操作系统下注册OCX控件,主要有以下几个步骤: 1.以管理员的身份打开命令提示符 2.使用DOS命令,进入到OCX控件所在的目录下 3.输入注册命令,回车即可 ...

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

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

  3. OCX控件强行注册+可信任站点添加+可信任站点ActiveX安全设置启用+收藏夹

    这个工具有两个版本html版和bat+reg版 html版    需要用户用ie打开,然后允许activeX的运行就行了,这里面会吧"OCX控件强行注册+可信任站点添加+可信任站点Activ ...

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

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

  5. 什么是OCX控件?注册它都有哪些作用?

    当标准控件不能完全满足用户需求时,用户可以编写自己的控件插入到编程工具中使用,编写的控件就是OCX.现在网页中也可以嵌入OCX,并称其为ActiveX控件.目前可以编写OCX的工具包括VB.VC.De ...

  6. anigif.ocx控件的注册方法说明及下载地址【免积分】

    本人是用anigif.ocx在labview中显示动图并控制的. 基于上述,给出使用说明如下: 1.将含有anigif.ocx的整个文件夹拷贝至labview安装目录下,如E:\LABVIEW里面 ( ...

  7. VC++ OCX 控件注册

    转自:http://www.cctry.com/thread-5334-1-1.html 方法一:在dos或Windows命令行下运行:regsvr32 ocxname.ocx 注册 示例: regs ...

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

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

  9. OCX控件在win10下的查看、删除、注册、卸载

    OCX控件我们平时应该接触过很多,比如ActiveX控件.MFC ActiveX控件.还有我们在HTML网页中使用的ActiveX控件等,以上这些都归属与OCX控件的范围. 那么如何查看这些ocx控件 ...

  10. VC++如何在程序中用代码注册和卸载ocx控件(代码)

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

最新文章

  1. redis持久化的几种方式
  2. 计算机基本水平测试内容,浙江师范大学计算机基础水平测试大纲(2018级新生使用)...
  3. 两款爱不释手的markdown编辑工具
  4. asp.netcore oracle,Asp.net core 3.1+EF Core2.2.6+Oracle.EntityFrameworkCore2.1.19连接Oracle数据库...
  5. 网页游戏怎么修改数据_一周网页游戏开服数据总结(9.1-9.7)
  6. 报错空指针异常_让你为之颤抖的Java常见的异常exception
  7. 树莓派python编程读取电压_《树莓派Python编程指南》——3.2 在结构体中存储值-阿里云开发者社区...
  8. DS博客作业01--日期抽象数据类型设计与实验
  9. oracle alter和 insert,Oracle 笔记一 select insert update delete transaction create alter
  10. uci2019计算机录取,最新!加州大学公布2019年新生录取数据!
  11. matlab函数coth,matlab函数
  12. 树莓派怎么切换输入法_树莓派如何安装中文输入法
  13. oracle北京时区,Oracle 时区 - Amazon Relational Database Service
  14. jQuery实现广告图片轮播切换
  15. python3思维导图.xmind_我常用的3款脑图工具
  16. PCB信号完整性及EMC整改措施
  17. 文件夹中的.nomedia文件
  18. 电销系统不仅外显手机号,还能自选归属地
  19. 【STM32H7的DSP教程】第38章 STM32H7的FIR高通滤波器实现(支持逐个数据的实时滤波)
  20. 坚持科技引领,趣开门人脸识别门禁助力平安小区建设

热门文章

  1. 新型计算机离我们还有多远
  2. 基本农田卫星地图查询_水经注万能地图下载器软件主界面功能说明
  3. ffmpeg将文件转码后推向服务器,FFmpeg转码服务器搭建
  4. cad批量打印快捷键_基础教程——CAD的批量打印功能
  5. c语言中计算熵的函数,如何用c++编程实现各种信源熵的计算
  6. Jeff Dean的传奇人生:超级工程师们拯救谷歌
  7. RawData是Bayer转RGB格式代码分析和NEON单元加速方法
  8. Java面试题--搜索(solrelasticsearch)
  9. CSS:行内/内部样式/外部样式的使用方式示例
  10. 代码安全之代码混淆及加固(Android)