最近单位的内网机子集中升级了一次 windows 安全补丁,结果发现以前工作正常的一个 Web 应用出问题了,它本来是调用 MSCOMM 控件对串口进行操作的,结果发现操作没有反应。开始以为是串口或外设有问题,结果用超级终端测试又正常。应该是 IE 出问题了。经过与没有打补丁的机器对比测试,发现打了补丁的就有问题,没打的就正常。看来是打补丁让 IE 出问题了。看了一下 IE 的管理加载项,里面本来应该有 MSCOMM 控件的,现在也没有显示了。于是上网查找,发现有人解决了,办法是先安装 IE7 ,再删除 IE7 ,重启后让 windows 恢复原来的 IE ,但这样工作量太大了,没有采用。还是在补丁上找线索。补丁太多,一个个删除测试不太可能,先看看补丁的说明信息,看到一个 ActiveX KillBit 安全补丁 KB973346 ,唉,这个应该有戏。删除它,再测试,程序正常。看来找到点上了。

    可是删除这个补丁时提示对其他几个补丁有影响,能不能不删除它而解决问题呢?再想想办法 。上 MS 的网站,查这个补丁的相关信息,终于找到了注册表关键位置

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Internet Explorer/ActiveX Compatibility/{648A5600-2C6E-101B-82B6-000000000014}]
Compatibility Flags = 0x400
 
这是补丁程序对有漏洞的 ActiveX 控件设置的标志,让 IE 不加载它。删除这个键,再看 IE 的管理加载项,里面出现了 MSCOMM 控件的名字  Microsoft Communication Control ,进一步测试程序,控件加载正常。看来这才是解决问题的最好办法。于是写了一个删除注册表键的 reg 文件:
 
Windows Registry Editor Version 5.00
[-HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Internet Explorer/ActiveX Compatibility/{648A5600-2C6E-101B-82B6-000000000014}]

 

双击这个 reg 文件,提示导入注册表成功后,相应键值被成功删除,问题搞定。