8

我有使用<Environment />元素更新环境变量的 wix 安装程序。

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

有没有人对我为什么/如何以及如何避免重新启动有任何想法。提前谢谢,没有邮件

更新:我找到了为什么会这样。事实证明,会话变量会在重新启动或发送系统广播消息时更新。发送广播消息

SendMessage (HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment");

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

SETX something_that_is_not_important value_that_is_not_important

请注意,您仍然需要关闭并打开命令行或 PowerShell 控制台

4

2 回答 2

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

于 2014-07-19T00:34:50.923 回答
1

似乎是一个特定的 wix 问题,请参阅底部的评论:this page

于 2013-01-15T09:03:01.470 回答