0

我们正在开发一个NSIS 安装程序,它可以编辑几种文件类型的注册表以更改它们的图标和运行它们的应用程序。
我们的工作流程在 Win7/32 位、WinXP/32 和 WinXP/64 上正常工作,但在 Win7/64 上无法正常工作。我们已经在多台 Win7/64 机器上测试过,问题在两个 Win7/64 实例上都是一致的。
另一个细节是它仅在覆盖现有关联时,因为创建一个新关联可以正常工作。

注册表编辑只需设置DefaultIconshell/open/command在注册表编辑完成后,我们使用SHChangeNotify系统调用强制外壳使用新设置进行更新。
在 Win7/64 上,注册表中已有的文件类型不会更新为新值。

; Tell the shell to reset its icon cache
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v \
(0x08000000, 0, 0, 0)'

非常感谢任何帮助,特别是不涉及系统重新启动或重新启动资源管理器的解决方案。感谢您的任何/所有帮助!-克里斯

4

1 回答 1

0

这个问题可能与 x64 上的注册表容易出错的许多事情有关:VirtualizationRedirectorReflection。您也可能错误地从文件扩展名映射到 progid?(很难判断您何时不发布任何代码或告诉我们您正在更改哪种文件类型)

要关闭虚拟化,请确保您的脚本包含RequestExecutionLevel admin.

您可以强制 NSIS 使用 64 位注册表,SetRegView但使用Process Monitor监控安装程序可能是一个更好的主意,这样您就可以看到您实际写入的位置。然后,您可以监视 explorer.exe 以查看它从哪里读取。

于 2012-08-27T19:22:47.023 回答