【问题标题】:Windows 7 64-bit file and icon association inconsistency (compared to Win7/32, WinXP/32, and WinXP/64)Windows 7 64 位文件和图标关联不一致(与 Win7/32、WinXP/32 和 WinXP/64 相比)
【发布时间】:2012-08-22 06:49:02
【问题描述】:

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

注册表编辑只需设置DefaultIconshell/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)'

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

【问题讨论】:

    标签: windows-7 build installation icons nsis


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-09-02
      • 2011-04-12
      • 2013-03-12
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多