2012-02-15 98 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将反映新的价值。