在 Windows 7 上,标题中列出的组件默认情况下似乎将“killbit”设置为 COMPAT_EVIL_DONT_LOAD(比较MSDN),也就是说,它们在HKLM\SW\IE\ActiveX Compatibility\{<CLSID>}\中的兼容性标志似乎默认设置为该值:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{B09DE715-87C1-11D1-8BE3-0000F8754DA1}]
"Compatibility Flags"=dword:00000400
当我将该值设置为 0 时(这就是Nirsoft 的 ActiveX 兼容性管理器在“激活”组件时所做的),一切正常。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{B09DE715-87C1-11D1-8BE3-0000F8754DA1}]
"Compatibility Flags"=dword:00000000
但这只是一个工作站的 GUI 解决方案。为了部署我们的软件,我需要一个安全稳定的程序(脚本或工具)来与我们的软件一起发布,它不仅将“killbit”设置为 0 或删除注册表项(应该首选哪个程序?),而且检查如果没有必要,什么也不做。优选地,该解决方案将仅通过文件名或文件列表传递,并自行进行所有其他必要的事情。
这是更大的问题开始的地方:
- 关于 COM 对象,注册表是通过 CLSID 查询的,而不是通过 ocx 文件名(即Windows 注册表中的InProcServer32条目)或(VersionIndependent)ProgID ( HKLM\Software\Classes\CLSID\{<CLSID>}\ ) 查询的。您是否知道一种方法,即查询与 ocx 文件或至少 ProgID 激进相关的 CLSID 的批处理/(PowerShell)脚本/工具/任何方法?
- 我知道 CLSID 在 Windows 2000 到 7 中是不变的吗?
- SlayOCX.vbs似乎是一种低级方法,称为SlayOCX.vbs和此处描述的组策略,可以用作网络范围的解决方案。但是:这是一个 vbs,在某些环境中关闭。此外,我将最终得到一个由该脚本检查的 CLSID 列表。例如,打包成一批我可能无法让客户的管理员以所描述的方式部署它,而是通过登录脚本或注册表中的 runonce 键或其他方式 - 不是很优雅。那么你有什么建议呢?我更喜欢一个解决方案(一个工具,一个我还不知道的 7 中的新组策略,一个更复杂的脚本,对系统和安全配置问题的依赖更少,......),这使得第一个信息问题变得多余。