设置环境变量需要在 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时出错

Windows添加环境变量是否需要重启

如何通过将 ASPNETCORE_ENVIRONMENT 环境变量设置为 Development 并重新启动应用程序来启用开发环境

如何重新设置linux环境变量

source命令 与 设置环境变量的四个文件 (设置永久环境变量)

win7 设置环境变量后,需要重新电脑问题