Powershell环境变量未更新

nom*_*ail 8 powershell

我有wix安装程序使用<Environment />element 更新环境变量.

环境变量值在注册表中更新.但是当我尝试打开Powershell时,除非我重启我的电脑,否则它看不到任何变化.

有没有人对为什么/如何以及如何避免重启有任何想法.提前谢谢,nomail

更新:我发现为什么会这样.事实证明会话变量在重新启动时更新或者如果发送了系统广播消息.发送广播消息

SendMessage (HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment");
Run Code Online (Sandbox Code Playgroud)

另一种发送消息的脏方法是使用SETX将新值写入环境变量并更新会话信息的命令

SETX something_that_is_not_important value_that_is_not_important
Run Code Online (Sandbox Code Playgroud)

请注意,您仍然必须关闭并打开CommandLine或PowerShell控制台

Bur*_*ris 2

这几乎肯定是因为WIX 文件的部分<WriteEnvironmentStrings>中缺少一个元素。<InstallExecuteSequence>该自定义操作负责发送广播 WM_SETTINGSCHANGE 消息。

这并不完全是 WIX 中的错误,而是一个记录不足的要求。为了有效地使用 WIX,您还必须了解 Windows Installer 数据库参考文档,而不仅仅是 XML。在有关环境表的 MSDN 主题中,描述了调用 WriteEnvironmentStrings 和 RemoveEnvironmentStrings 自定义操作的需要,但所使用的术语对于没有本机 MSI 背景的人来说可能很陌生。

显示此内容的文章位于http://blogs.technet.com/b/alexshev/archive/2008/03/28/from-msi-to-wix-part-13-installable-items-environment-variable.aspx