我们正在开发一个 NSIS安装程序,它会在注册表中编辑几种文件类型,以更改其图标和运行它们的应用程序。
我们的工作流程在Win7 / 32位,WinXP / 32和WinXP / 64上正常工作,但在Win7 / 64上它不起作用。我们已经在多台Win7 / 64机器上测试过这个问题,而且这两个问题在Win7 / 64实例上都是一致的
另外一个细节是,只有在覆盖现有关联时,才能创建新关联。
注册表编辑只需设置DefaultIcon
和shell/open/command
注册表编辑完成后,我们使用SHChangeNotify
系统调用强制shell使用新设置进行更新。
在Win7 / 64上,注册表中已有的文件类型不会更新为新值。
; Tell the shell to reset its icon cache
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v \
(0x08000000, 0, 0, 0)'
非常感谢任何帮助,尤其是不涉及系统重启或重启资源管理器的解决方案。感谢您的帮助! -Chris
答案 0 :(得分:0)
此问题可能与x64上的注册表出现问题有关:Virtualization,Redirector和Reflection。你也可能错误地从文件扩展名映射到progid? (很难说你什么时候不发布任何代码或告诉我们你正在改变哪种文件类型)
要关闭虚拟化,请确保您的脚本包含RequestExecutionLevel admin
。
您可以强制NSIS将{64}注册表与SetRegView
一起使用,但使用Process Monitor监视安装程序可能更好一些,这样您就可以看到实际编写的位置。然后,您可以监视explorer.exe以查看它的读取位置。