论坛风格切换切换到宽版
  • 5511阅读
  • 1回复

请教NSIS 如何用InstallDirRegKey读取64位win7/8 下软件的安装路径? [复制链接]

上一主题 下一主题
离线fly9902
 

发帖
27
金钱
10
威望
1
只看楼主 倒序阅读 0 发表于: 2014-07-07
InstallDirRegKey可以很方便的读取软件安装路径,而且很好用,现在遇到一个情况

例如我想读取AutoCAD2010的安装路径为 C:\Program Files\AutoCAD 2010

NSIS 代码为

InstallDirRegKey HKLM "SOFTWARE\Autodesk\AutoCAD\R18.0\ACAD-8001:804" "Location"

此代码在32位win7下可用,但在64位win7或win8下无法获取结果

请大大们帮帮忙,多谢
离线水晶石

发帖
13
金钱
130
威望
13
只看该作者 1 发表于: 2014-08-08
SetRegView命令设置作用于 注册表命令 的注册表查看。在 Windows x64 上共有2种查看方式。一种用于 32-bit 应用程序,另一种用于 x64 应用程序。默认情况下,32-bit 应用程序运行在 x64 系统的 WOW64 模式下时,只允许使用 32-bit 查看方式。使用 SetRegView 64 将允许安装程序在 x64 中访问注册表键值。

它将影响 DeleteRegKey, DeleteRegValue, EnumRegKey, EnumRegValue, ReadRegDWORD, ReadRegStr, WriteRegBin, WriteRegDWORD, WriteRegStr 和 WriteRegExpandStr。

它不会影响 InstallDirRegKey。另外,在函数 .onInit 中也可使用 ReadRegStr 读取注册表。

SetRegView 32
ReadRegStr $0 HKLM Software\Microsoft\Windows\CurrentVersion ProgramFilesDir
DetailPrint $0 # prints C:\Program Files (x86)
SetRegView 64
ReadRegStr $0 HKLM Software\Microsoft\Windows\CurrentVersion ProgramFilesDir
DetailPrint $0 # prints C:\Program Files
Function .onInit
  SetRegView 64
  ReadRegStr $INSTDIR HKLM Software\NSIS ""
  SetRegView 32
FunctionEnd