2011-11-28 69 views
6

我努力從有INSTALLDIR內IF ELSE塊

; The default installation directory 
InstallDir $PROGRAMFILES\${PRODUCT_NAME} 

下面的代碼

!include x64.nsh 
${If} ${RunningX64} 
    ; The default installation directory 
    InstallDir $PROGRAMFILES\${PRODUCT_NAME} 
${Else} 
    ; The default installation directory 
    InstallDir $PROGRAMFILES64\${PRODUCT_NAME} 
${EndIf} 

我得到以下錯誤: -

!insertmacro: _If 
Error: Can't add entry, no section or function is open! 
Error in macro _RunningX64 on macroline 2 
Error in macro _If on macroline 9 
Error in script "C:\Users\yccheok\Desktop\mysoftware.nsi" on line 17 -- aborting creation process 

有沒有辦法,我可以設置值爲InstallDir,如果其他塊在?

回答

9

如果你需要一個動態的$ INSTDIR你不應該在.onInit使用INSTALLDIR可言,但設定$ INSTDIR:

Installdir "" 
!include LogicLib.nsh 
!include x64.nsh 

Function .onInit 
${If} $InstDir == "" ; /D= was not used on the command line 
    ${If} ${RunningX64} 
     StrCpy $InstDir "c:\foo" 
    ${Else} 
     StrCpy $InstDir "c:\bar" 
    ${EndIf} 
${EndIf} 
FunctionEnd 

您當前的if else塊沒有任何意義,因爲你是選擇32位在x64上的程序文件和在x86上的64位程序文件!可以在x86上使用$ PROGRAMFILES64,所以如果你總是想要「真實」的程序文件,你可以在所有平臺上使用$ PROGRAMFILES64 ...

+1

「$ PROGRAMFILES64 for all platforms」 - >這是一個非常好的提示。順便說一下,「/ D =未在命令行中使用」處理案例很重要,因爲我的用戶大多數時間只需雙擊安裝程序即可。 –

+1

@YanChengCHEOK不,它不重要,但/ D將覆蓋InstallDir,因此保持兼容不會傷害;) – Anders

+1

謝謝!我的問題是我試圖在'.onInit'之外做這件事。 – thameera