2013-10-15 282 views
2

我想爲我的應用程序設置正確的安裝文件夾。 我可以檢測安裝程序是否適用於32位或64位系統?因爲現在當我在x64系統上安裝x32應用程序時,InstallDir不正確。NSIS安裝程序 - 定義安裝程序和系統x32/x64

我有一個用於x32和x64安裝程序的構建腳本,我使用x64.nsh來定義程序文件路徑。但問題是:即使安裝程序檢測到x64系統,如果當前版本爲x32,它仍將安裝在「C:\ Program Files」而不是「C:\ Program Files(x86)」中。

在最壞的情況下,我將不得不爲兩個安裝程序(x32,x64)創建兩個構建腳本,但我想避免它。

那麼,有什麼辦法來定義,如果安裝程序是32位或64位系統?

回答

1

我有同樣的問題。最後使用過的應用程序的弓至NSI腳本包裝腳本(makensis.exe /達奇= 86/64),並像這樣在NSI腳本本身:

${If} ${RunningX64} 
    ${If} ${ARCH} == "x64" 
    StrCpy $InstDir "$PROGRAMFILES64\${PROGNAME}" 
    ${Else} 
    StrCpy $InstDir "$PROGRAMFILES32\${PROGNAME}" 
    ${Endif} 
${Else} 
    ${If} ${ARCH} == "x64" 
    Quit 
    ${Else} 
    StrCpy $InstDir "$PROGRAMFILES\${PROGNAME}" 
    ${Endif} 
${EndIf} 
0

如果要安裝始終是32bit的應用程序就用InstallDir "$ProgramFiles\MyApp"

如果安裝程序包含兩個相同的應用程序的32位和64位版本,你要安裝的「原生」的版本,你必須設置$ InstDir自己在.onInit:

!include LogicLib.nsh 
!include x64.nsh 
; Don't use InstallDir[RegKey] so $InstDir is empty by default 

Function .onInit 
${If} $InstDir == "" ; Don't override setup.exe /D=c:\custom\dir 
    ${If} ${RunningX64} 
     StrCpy $InstDir "$ProgramFiles64\MyCompany\MyApp" 
    ${Else} 
     StrCpy $InstDir "$ProgramFiles32\MyCompany\MyApp" 
    ${EndIf} 
${EndIf} 
FunctionEnd 

Section 
SetOutPath $InstDir 
${If} ${RunningX64} 
    File "AMD64\myapp.exe" 
${Else} 
    File "i386\myapp.exe" 
${EndIf} 
SectionEnd 
+1

首先,感謝你的答案,這是有幫助的。但是,這個問題更復雜。當我使用.onInit函數構建X32安裝程序時,當我在X64系統上運行它時,instdir始終爲「C:\ Program Files」,似乎無法更改它。 我必須安裝X32/X64應用到同一個文件夾,但在適當的PROGRAMFILES目錄( 「C:\ Program Files文件\企業\」 或 「C:\ Program Files文件(x86)的\企業\」 ) 我結束使兩個安裝程序: - 兩個系統x32 ver使用$ PROGRAMFILES32 - x64 ver對x64使用$ PROGRAMFILES64,並防止運行x32 – Przunk