2014-03-03 21 views
1
!echo "$%MY_VAR%" 

打印出NSIS:如何在編譯時檢查是否有環境變量存在

$%MY_VAR%(... \ installer.nsi:46)

所以變量根本不被替換。這是一個錯誤?我在這裏有點難過。我該如何測試變量是否存在?到目前爲止,我認爲我可以使用

!if "$%MY_VAR%" = "" 

但是,如果沒有替換,那麼這是行不通的。合乎邏輯的結論是使用這個:

!if "$%MY_VAR%" = "$%MY_VAR%" 

我做錯了嗎?

+0

你最後一個例子基本上只是如果1 = 1 – Anders

+0

並非在所有替換值是在Windows上不尋常和NSIS做它,因爲!保留類似c:\ $%foo%\ bar的路徑比使用環境變量更重要... – Anders

回答

3

!if x = y實際上是大量的測試,你需要使用==測試字符串。

你需要欺騙編譯器得到這個工作:

; NSIS 2+ 
!define DOLLAR $ 
!if "$%foo%" == "${DOLLAR}%foo%" 
!echo "%foo% not set" 
!endif 

; NSIS 3+ 
!if "$%foo%" == "${U+24}%foo%" 
!echo "%foo% not set" 
!endif 
0

我只是做了一個快速測試(NSIS 3.0a0和Unicode NSIS 2.46.5,都在Windows 7 x64上),我沒有問題得到$%ENV_VAR%取代。下面是我如何測試它:

!if "$%MY_VAR%" != "" 
    !echo "MY_VAR is set" 
!else 
    !warning "MY_VAR not set" 
!endif 

我想你已經雙重檢查你的環境變量是真的保存

+0

並且如果%MY_VAR%爲空? – Anders

+0

我不認爲在Windows中有空環境變量這樣的事情 – Sxilderik

相關問題