我们正在开发一个NSIS安装程序,它可以编辑注册表中的几个文件类型,以更改它们的图标和运行它们的应用程序。
我们的工作流在Win7 7/32位、WinXP/32和WinXP/64上正确工作,但在Win7 7/64上却不能工作。我们已经在多台Win7 7/64机器上测试了这一点,并且这个问题在Win7 7/64实例中都是一致的。
另一个细节是,只有当重写现有的关联时,创建一个新的关联才能正常工作。
注册表编辑简单地设置了DefaultIcon
和shell/open/command
,在注册表编辑完成后,我们使用SHChangeNotify
系统调用强制shell使用新设置进行更新。
在Win7 7/64上,已经在注册表中的文件类型没有更新到新值。
; Tell the shell to reset its icon cache
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v \
(0x08000000, 0, 0, 0)'
任何帮助都是非常感谢的,特别是不涉及系统重新启动或重新启动Explorer的解决方案。谢谢你的帮助!-Chris
发布于 2012-08-27 19:22:47
这个问题可能与x64上的注册中心( 虚拟化、重定向和反射 )的注册错误有关。您还可能不正确地将文件扩展名映射到progid吗?(当您不发布任何代码或告诉我们您正在更改的文件类型时,很难分辨)
若要关闭虚拟化,请确保脚本包含RequestExecutionLevel admin
。
您可以强制NSIS在SetRegView
中使用64位注册表,但是使用过程监视器监视安装程序可能是一个更好的主意,这样您就可以看到实际编写的位置。然后,您可以监视explorer.exe,以查看它从哪里读取。
https://stackoverflow.com/questions/12147791
复制相似问题