NSIS x64 位系統下安裝

原文鏈接:https://www.cnblogs.com/zealsoft/archive/2005/05/25/162314.html

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)"

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章