安装了M$十二月的补丁后,可能影响使用了ActiveX的B/S应用,存在两种可能的原因。
原因一:由于注册表项丢失。
奇怪,更新补丁会导致注册表项丢失?奇怪的M$
解决一:
更新注册表
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\CLSID\{0000031A-0000-0000-C000-000000000046}]
@="ClassMoniker"
[HKEY_CLASSES_ROOT\CLSID\{0000031A-0000-0000-C000-000000000046}\InprocServer32]
@="ole32.dll"
[HKEY_CLASSES_ROOT\CLSID\{0000031A-0000-0000-C000-000000000046}\ProgID]
@="clsid"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\CLSID]
@="{0000031A-0000-0000-C000-000000000046}"
原因二:SFI
在IE运行COM组件之前,安全更新MS05-052引入了一些附加检查。其目的是阻止未被设计为可在IE中安全实例化的控件被实例化。 其中一项是在一个COM对象可以在IE中运行之前,先检查在Internet区中的ActiveX控件是否存在
IObjectSafety 接口。
解决二:
- 重新编译ActiveX组件(嘿嘿)
- 移到安全区
- 修改注册表(呵呵,M$总是支持这种方式来绕开安全设置)
在注册表中设置 ActiveX 兼容性值
可以在注册表中设置 ActiveX 兼容性标志。为此,请按照下列步骤操作:
1. 单击“开始”,单击“运行”,键入 Regedit.exe,然后单击“确定”。
2. 找到以下注册表子项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility
3. 右键单击“ActiveX Compatibility”,指向“新建”,单击“项”,键入 ActiveX 控件的 CLSID,然后按 Enter。
4. 右键单击您在步骤 3 中创建的项,指向“新建”,然后单击“DWORD 值”。
5. 键入 Compatibility Flags,然后按 Enter。
6. 右键单击“Compatibility Flags”,然后单击“修改”。
7. 在“数值数据”框中,键入 00800000,然后单击“确定”。
8. 退出注册表编辑器。
关于SFI和UFI,可以参考俺
另一篇BLOG。
更多信息,可查询
MS知识库。