Windows 7 Windows 7 64位文件和图标关联不一致(与Win7/32、WinXP/32和WinXP/64相比)

Windows 7 Windows 7 64位文件和图标关联不一致(与Win7/32、WinXP/32和WinXP/64相比),windows-7,build,installation,icons,nsis,Windows 7,Build,Installation,Icons,Nsis,我们正在开发一个NSIS安装程序,该安装程序编辑两种文件类型的注册表,以更改它们的图标和运行它们的应用程序。 我们的工作流在Win7/32位、WinXP/32和WinXP/64上正常工作,但在Win7/64上不工作。我们已经在多台Win7/64计算机上对此进行了测试,并且在两台Win7/64实例上问题是一致的。 另外一个细节是,它仅在重写现有关联时才可用,因为创建一个新关联可以正常工作 注册表编辑只需设置DefaultIcon和shell/open/command注册表编辑完成后,我们使用shc

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

注册表编辑只需设置
DefaultIcon
shell/open/command
注册表编辑完成后,我们使用
shchangennotify
系统调用强制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

此问题可能与x64上的注册表出现问题的任何事情有关:,和。也可能是您错误地将文件扩展名映射到progid?(当您没有发布任何代码或告诉我们您正在更改的文件类型时,很难说)

要关闭虚拟化,请确保脚本包含
requestexecutionleveladmin

您可以强制NSIS将64位注册表与
SetRegView
一起使用,但最好是使用来监视安装程序,这样您就可以看到实际编写的位置。然后,您可以监视explorer.exe以查看它从何处读取