安裝了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知識庫。