我正在构建一个软件的安装程序,该软件需要第三方可执行文件才能在路径中运行。换句话说,我的软件通过系统调用调用3rdparty.exe
。
我运行了第三方安装程序,然后运行了我的软件,但我的软件没有找到3rdparty.exe
,因为路径环境变量没有被更改。我通过在全新命令行运行set > file.txt
来确认这一点,并且路径中的新添加内容不存在。是的,我在第三方软件完成后启动了新的命令行 - 几分钟后....所以是的,应该已经填充了环境变量。
现在这里是奇怪的部分。我去了环境变量"环境变量"用于编辑系统路径的对话框,猜猜新路径已经存在,并添加到旧路径的末尾。
以下是我留下的事实:
第三方安装程序更改了系统路径
环境变量,将C:\program files\blah\...
添加到结尾
路径。
这会立即出现在"环境变量"对话框。
这个没有在没有重新启动的情况下显示在任何新的cmd.exe shell中 开始。是的,我多次尝试过。
我以前从未见过这种行为。有人可以解释一下这里发生了什么吗?我已经运营多年,假设一旦设置了环境变量,任何新流程都将获得完整的当前环境的副本。在一个案例中没有发生这种情况。
何时应用Windows环境变量?我错过了什么?这是第三方软件的一些奇怪的安装程序的工件?这是Windows的神器吗?
将这一切归结为一个问题:发生了什么?
答案 0 :(得分:1)
使用SET
命令所做的更改不是永久性的,它们仅适用于当前CMD prompt
,仅在CMD
窗口关闭之前保留。
要在命令行永久更改变量,请使用SetX
或使用GUI - Control Panel | System | Environment | System/User Variables
比照SETX.exe (Resource Kit, Windows 7)
已更新:虽然我们不知道第三方安装程序更改系统路径环境变量的方式,但所有症状都表明通过注册表更改执行此操作 - 如果是不播放WM_SETTINGCHANGE
消息,然后,根据Microsoft Technet和MSDN页面,更改不会生效,直到您注销然后重新登录 - 甚至重新启动计算机...(通过或由于,缓存一些注册数据)。
你问题中描述的行为似乎并不奇怪:它不是错误,它是一个特征......: - )