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.nsh 裏有三個宏:
RunningX64 : 檢查運行環境是否是X64
DisableX64FSRedirection : 禁止文件轉向
EnableX64FSRedirection : 允許文件轉向
簡單的測試代碼:
!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_Win32
2、禁止文件轉向
調用Wow64EnableWow64FsRedirection函數可以禁止或恢復文件轉向。如:
; 禁止
System::Call "Kernel32::Wow64EnableWow64FsRedirection(i 0)"
......
; 恢復
System::Call "Kernel32::Wow64EnableWow64FsRedirection(i 1)"