本文共 1310 字,大约阅读时间需要 4 分钟。
NSIS生成的安装程序都是32位的应用程序,所以在x64下运行时,所安装的文件会被自动转向,如安装到C:\Windows\System32目录下的文件会被安装到C:\Windows\SysWOW64目录下。这对于有些软件是不方便的。
NSIS已经有现成的头文件 x64.nsh (X:\NSIS\Include\x64.nsh) 供大家使用
首先需要引用
!include "x64.nsh"
x64.nsh 里有三个宏 _RunningX64、DisableX64FSRedirection 和 EnableX64FSRedirection
根据宏名称能猜到它们是功能,分别对应 检查运行环境是否是X64、禁止文件转向 和 运行文件转向
在实际调用的时候就可以根据实际需要来运用上述3个宏了。
简单的测试代码:
!include x64.nsh Function .onInit ${If} ${RunningX64} ${EnableX64FSRedirection} ${else} MessageBox MB_OK "Sorry this application runs only on x64 machines" Abort ${EndIf} FunctionEnd Section - Detailprint '$SYSDIR' DetailPrint '$WINDIR' DetailPrint '$PROGRAMFILES' SectionEnd参考资料:
NSIS在x64系统下的使用
NSIS生成的安装程序都是32位的应用程序,所以在x64下运行时,所安装的文件会被自动转向,如安装到C:\Windows\System32目录下的文件会被安装到C:\Windows\SysWOW64目录下。这对于有些软件是不方便的。一个办法是重新编译NSIS的代码为64位,就是有点麻烦,而且需要大量的时间测试一下。利用简单的代码也可以解决类似的问题:
1、检测操作系统是否为x64系统 可以读环境变量PROCESSOR_ARCHITECTURE,该变量在32位系统为x86,在AMD的x64的机器和在Intel的x64机器上为AMD64,在安腾(Itanium)系统为IA64。可以使用下面的代码: ReadEnvStr $Win64 PROCESSOR_ARCHITECTURE StrCmp $Win64 "x86" lbl_Win322、禁止文件转向 调用函数可以禁止或恢复文件转向。如: ; 禁止 System::Call "Kernel32::Wow64EnableWow64FsRedirection(i 0)" ...... ; 恢复 System::Call "Kernel32::Wow64EnableWow64FsRedirection(i 1)"$PROGRAMFILES on x64