NSIS 和 PATH 环境变量
NSIS and PATH env variables
在我的安装程序中,我嵌入了 cmake 和其他安装程序。
在安装过程中,用户通过我的安装程序安装 cmake,并将 cmake 添加到路径中。
此时如果我打开命令提示符并键入cmake,它实际上被识别了。
但在安装程序中我运行执行以下命令:
ReadEnvStr %COMSPEC%
ExecWait '"" /c cmake XXX'
但是它告诉我无法识别cmake。这怎么可能?我之前只是在 c:/windows/system32/cmd.exe 中打开一个命令提示符并输入 cmake,它被识别了,所以为什么这段代码不起作用?
好像路径环境变量没有以某种方式更新。当然,如果我重新启动它可以正常工作,但我想避免它。
感谢您的帮助。
环境变量默认继承自父进程。 Explorer.exe 是唯一监听环境变化的应用程序,因此如果您从开始菜单启动新进程,它将 运行 使用更新的环境。
您可以更新安装程序进程环境,它将传递给 ExecWait 子进程:
System::Call 'kernel32::SetEnvironmentVariable(t "foo", t "bar")'
在处理长路径字符串时,您确实应该使用 EnvVar plug-in.
在我的安装程序中,我嵌入了 cmake 和其他安装程序。 在安装过程中,用户通过我的安装程序安装 cmake,并将 cmake 添加到路径中。
此时如果我打开命令提示符并键入cmake,它实际上被识别了。
但在安装程序中我运行执行以下命令:
ReadEnvStr %COMSPEC%
ExecWait '"" /c cmake XXX'
但是它告诉我无法识别cmake。这怎么可能?我之前只是在 c:/windows/system32/cmd.exe 中打开一个命令提示符并输入 cmake,它被识别了,所以为什么这段代码不起作用?
好像路径环境变量没有以某种方式更新。当然,如果我重新启动它可以正常工作,但我想避免它。
感谢您的帮助。
环境变量默认继承自父进程。 Explorer.exe 是唯一监听环境变化的应用程序,因此如果您从开始菜单启动新进程,它将 运行 使用更新的环境。
您可以更新安装程序进程环境,它将传递给 ExecWait 子进程:
System::Call 'kernel32::SetEnvironmentVariable(t "foo", t "bar")'
在处理长路径字符串时,您确实应该使用 EnvVar plug-in.