3

我们有一个旧版 VB6 应用程序,它在启动时通过下载最新文件并注册 COM 组件来更新自身。这适用于本地 (regsvr32) ActiveX COM 组件和远程 (clireg32) 在另一台计算机上的 COM+ 中注册的 ActiveX COM 组件。

出于安全原因,新要求阻止我们写入 HKEY_LOCAL_MACHINE (HKLM),这显然是在调用 regsvr32 和 clireg32 时默认发生的情况。

我们想出了一种使用RegOverridePredefKey Windows API 方法在 HKEY_CURRENT_USER\Software\Classes (HKCU) 下注册本地 COM 组件的方法。这通过将插入到注册表中的插入重定向到 HKCU 位置来实现。然后当 COM 组件被实例化时,windows 首先查找 HKCU,然后再查找 HKLM 中的组件信息。这取代了 regsvr32 正在做的事情。

我们此时遇到的问题是,当我们尝试使用clireg32注册VBR/TLB时,这个注册过程也将注册密钥添加到HKEY_LOACL_MACHINE。

有没有办法将 clireg32.exe 重定向到注册组件是 HKEY_CURRENT_USER?是否有任何其他方法可以让我们在安全访问受限的客户端机器上注册这些 COM+ 组件?

我们目前唯一的解决方案是手动将注册信息写入注册表,但这并不理想,而且会成为一个维护问题。

4

1 回答 1

4

我在这里看到很少有快乐的答案。使用 12 年历史的技术需要安装更新的应用程序的概念是一个奇怪的概念,并且在现代机器上没有得到很好的支持。我认为,像无注册 COM 这样的通用解决方案已经出局,与 COM+ 不兼容。一个错误修复样式更新需要重新注册组件也很奇怪。您是否已验证这实际上是必需的?

扩展该主题,您实际上多久更改一次部署中的 GUID?当密钥不经常改变时,自己负责注册而不是让组件本身负责注册应该是可行的。可以像使用 SysInternals 的 ProcMon 实用程序捕获注册一样简单,编写一个 .reg 文件来设置 HKCU 密钥。

除此之外,您确实需要获得对不可写的注册表项的权利。如果您无法从客户那里获得同意,请考虑要求安装更新的计划任务。只要系统管理员允许,他们就可以获得访问权限。

于 2010-06-16T20:27:21.717 回答