Windows 7正在缓存一些COM类信息。较旧的操作系统没有这样做。在操作系统查找HKCU\Software\Classes\CLSID\{GUID}\LocalServer32
值后,它会缓存该值,并且不再查找它。
当我们更新软件时,我们将新更新放在不同的目录中,然后更新HKCU\Software\Classes\CLSID\{GUID}\LocalServer32
值以反映新路径。下次运行软件时,如果在较旧的Windows操作系统下运行,它将使用最新文件。但是,在Windows 7上,它将继续使用旧文件,直到重新启动操作系统。
我运行了进程监视器,发现在Windows 7下,它在第一次读取后再也没有再次读取注册表项。在较旧的操作系统上,它每次都会读取该密钥。
我的问题是:每次创建一个新的proc COM对象时,有没有办法强制Windows 7重新读取HKCU配置单元中的LocalServer32信息?
答案 0 :(得分:2)
我只能通过......来解决这个问题。
1:停止流程
2:使用regsvr32显式取消注册库(或exename / unregserver)
3:注册新组件
4:重新开始这个过程。
我怀疑是Un Reg部分失败了。如果您只是直接更改注册表项,那么您应该调用RegSvr32 / u。
当您调用RegSvr32时,还要确保新目录位置是当前目录。
请注意,我一直停止该过程,然后取消注册,这可能是一个重要的细节。
答案 1 :(得分:1)
由于这是谷歌针对这个狭隘问题的最佳结果,我认为为此问题添加我的故障排除结果会很有价值。
我在SO上发现了这个回复:C# : How to change windows registry and take effect immediately
来自该答案的链接解决方案:Registry Watcher C#
这两个似乎都可行,可以在不强制重启的情况下管理已更改的密钥。对于我们(如OP),这是在安装更新时。对于我们(可能与OP不同),这种情况并不常见,我们认为实施和测试修复程序的努力超出了需要重新启动的简单解决方案:Windows用户无论如何都希望安装软件。