设置环境变量需要在 64 位上重新启动
Posted
技术标签:
【中文标题】设置环境变量需要在 64 位上重新启动【英文标题】:Setting environment variables requires reboot on 64-bit 【发布时间】:2011-10-22 05:24:47 【问题描述】:我正在使用需要设置系统 PATH 环境变量的 Wix 3.5 安装程序。
这就是我设置环境变量的方式:
<Directory Id="DirectoryName">
<Component Id="ComponentID" Guid="BE20AF67-5943-4AF4-BE66-226E2D4B844F">
<Environment Id="EnvironmentID" Name="PATH" Action="set" Value="the path" Part="last" Separator=";" System="yes" />
</Component>
</Directory>
这似乎适用于 32 位系统,无需重新启动即可识别更改。但是,当我在 64 位 Windows 7 上尝试时,需要重新启动。
这是 64 位系统上的已知问题吗?
也许最好的方法是安排重新启动以覆盖所有基地。
谢谢, 艾伦
【问题讨论】:
您的安装程序是 64 位的吗?如果不是,PATH
的更新值可能会写入注册表的 WOW64 分支而不是 64 位分支。
感谢您的回复。安装程序构建为 64 位。我们遇到的症状是 Windows GUI 报告了更新的 PATH 变量,但命令提示符没有。重启机器解决了。如果它在 WOW64 分支中,这是您所期望的吗?
不,我没想到会这样。如果它显示在 Windows GUI 中,则它已写入正确的位置。但我认为 MSI 不会调用函数让系统重新读取环境变量。当您直接使用注册表添加或更改变量时,它们不会自动重新读取;当您单击确定时,Windows GUI 会调用函数或其他东西,并且新进程会继承更新后的值。
【参考方案1】:
在ServerFault上检查这个问题:How do you add a Windows environment variable without rebooting?
因此,要将更改传播到环境变量列表,您可以编写一个广播 WM_SETTINGCHANGE
消息的小程序,如知识库文章 How to propagate environment variables to the system 中所述。
【讨论】:
谢谢阿列克谢。这看起来像是答案。 @Alan 不客气。我不确定为什么 Windows Installer 的行为会有所不同。你可以通过编写一个处理WM_SETTINGCHANGE
消息的程序来测试它。【参考方案2】:
当您添加或设置环境变量时,会向所有程序发送WM_SETTINGCHANGE
消息以通知它们更改。但是,任何已经运行的程序都不会获得更新的环境,除非它可以自己处理此消息。重新启动系统会更新每个程序。
无需重启的解决方法:
-
杀死并重新启动 explorer.exe,尽管这并不适用于每个正在运行的进程,并且仅适用于当前登录的用户。
重新启动您要使用的进程或程序,即。用 cmd.exe 试试这个。同样,这仅适用于已登录的用户。
总结一下,为了让每个用户都能使用它,您仍然需要重新启动。
【讨论】:
重新启动了找不到新环境变量的程序(上面的解决方法2),这有效。以上是关于设置环境变量需要在 64 位上重新启动的主要内容,如果未能解决你的问题,请参考以下文章
在Windows 7 64位上启动JBoss 7.1.1时出错
如何通过将 ASPNETCORE_ENVIRONMENT 环境变量设置为 Development 并重新启动应用程序来启用开发环境