【问题标题】:NSIS: environment variable created doesn't workNSIS:创建的环境变量不起作用
【发布时间】:2012-02-15 11:10:24
【问题描述】:

我正在创建一个 Env 变量,然后将其附加到我在 Win7 - 64 位上的 NSIS 安装程序脚本中的 PATH 变量中。

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

Push "%MyPath%"
Call AddToPath

现在安装后我可以在 cmd 提示符中看到两个变量

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

但在运行时找不到任何 exe/dll。 如果我以管理员身份运行 cmd 提示符,然后运行 ​​exe,它运行良好。 如果我直接以管理员身份运行 exe,它也可以工作。

另外有趣的是,如果我打开环境编辑器,双击 MyPath 变量并单击确定(不更改任何内容),我的 exe 可以正常运行而无需以管理员身份运行。 现在,如果我在 cmd 提示符下检查 Path,MyPath 变量将被替换

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

我尝试在创建环境变量后添加“调用 EnvVarUpdate”,但它不起作用。

我使用的是 NSIS Unicode 版本 2.46.3

【问题讨论】:

  • 我在 SuperUser 中看到的答案表明这不是 NSIS 问题,而是 Windows 存在 env 问题。另一个环境中的变量。多变的。不确定它的真实性。

标签: nsis


【解决方案1】:

通过使用注册表来添加/修改路径而不丢失路径中的数据的机会会大得多。

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% 环境变量中。这是为了提供与需要设置 PATH 的旧安装例程的兼容性。但是,AUTOEXEC.BAT 中的所有其他命令都将被忽略。无论如何,这或多或少已经过时了。

但我们可以继续使用您的方法,但只需尝试不同的方法来实现您的目标。我没有对此进行测试,但您可以尝试类似的方法:

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 将反映新值。

【讨论】:

    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 2020-11-25
      • 1970-01-01
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      相关资源
      最近更新 更多