2012-02-15 72 views
1

我創建一個環境變量,然後在Win7上我NSIS安裝腳本追加到PATH變量環境變量 - 64位。NSIS:創建不起作用

Push "MyPath" 
Push "D:\MyFolder\bin;D:\MyFolder\lib" 
Call WriteEnvStr 

Push "%MyPath%" 
Call AddToPath 

現在安裝後,我可以看到無論是在命令提示符

MyPath=D:\MyFolder\bin;D:\MyFolder\lib 
Path=%MyPath%;<my existsing path> 

變量但是從在運行時沒有發現任何EXE/DLL。 如果我以管理員身份運行cmd提示符,然後運行exe,它運行良好。 它也可以作爲管理員直接運行exe。

同樣有趣的是,如果我打開myPath變量中環境的編輯器,雙擊,然後單擊確定(不改變任何東西),不以管理員身份運行exe文件我的運行正常。 現在,如果我在命令提示符支票路徑,myPath變量中被取代

MyPath=D:\MyFolder\bin;D:\MyFolder\lib 
Path=D:\MyFolder\bin;D:\MyFolder\lib;<my existsing path> 

我嘗試添加創建環境變量後,「呼叫EnvVarUpdate」,但它不工作。

我使用NSIS Unicode版本2.46.3

+1

我在超級用戶中看到了答案,它暗示它不是NSIS問題,但是Windows有env問題。在另一個env中變量。變量。不知道它是多麼的真實。 – vinaym 2012-02-17 05:00:20

回答

-2
${EnvVarUpdate} $0 "PATH" "A" "HKLM" "C:\Program Files\Java\jre6\bin" 

StrCpy $R0 "$0" 

System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("PATH", R0).r2' 

ReadEnvStr $R0 "PATH" 

ExecWait "$INSTDIR\tmp\batchfile.bat 
0

你添加/修改的路徑沒有被截斷這將是通過使用註冊表更大的路徑丟失數據的可能性。

ReadRegStr $0 HKCU "Environment" Path 
StrCpy $1 "D:\MyFolder\bin;D:\MyFolder\lib" 
StrCpy $2 "$0;$1" 
WriteRegStr HKCU "Environment" Path "$2" 

如果你的系統有一個AUTOEXEC.BAT文件,然後任何路徑在AUTOEXEC.BAT設置也將被追加到%PATH%環境變量。這是爲了提供與需要設置PATH的舊安裝例程的兼容性。然而,AUTOEXEC.BAT中的所有其他命令都被忽略。無論如何,這或多或少已經過時。

但我們可以只是你的方法繼續但只是嘗試acomplishing你的目標的不同手段。我沒有測試過這一點,但你可以嘗試一些與此類似:

StrCpy $R0 "MYPATH" 
StrCpy $R1 "D:\MyFolder\bin;D:\MyFolder\lib" 
System::Call `Kernel32::SetEnvironmentVariable(t"$R0",t"$R1")` 

現在包括新的變量,如以下路徑:

ReadEnvStr $R0 COMSPEC 
ReadEnvStr $R1 MYPATH 
ExecDos::Exec /TOSTACK `"$R0" /c "SetX PATH=%PATH%;$R1 -m"` 

現在,您可以輕鬆地改變一個變量%mypath中在未來的任何時間%,PATH將反映新的價值。