繁体   English   中英

更改PATH后必须重新启动

[英]Must reboot after changing PATH

严格来讲,这可能不是WIX问题,但它应该是一个与建立良好的最佳实践有关的众所周知的问题。 我只是在Google上找不到这些做法。 使用WiX 3.6,Windows 7,Visual Studio 2008,但安装必须支持从XP到更高版本的Windows。

我正在安装依赖于某些第三方DLL的COM对象。 该对象本身已注册好,并且所有DLL都安装在安装文件夹中,安装程序将此文件夹添加到系统的PATH环境变量中。 代码如下:

<Component Id="RequiredLibraries" Guid="$(var.RequiredLibrariesGUID)">
    <?include redist.wxi?>
    <Environment Id="PATH" Name="PATH" Value="[INSTALLDIR]" Permanent="no" Part="last" Action="set" System="yes" />
</Component>

在我的机器上,安装后我可以立即使用该对象,但是在某些机器上,我必须重新启动计算机。 重新启动很痛苦,我不知道为什么有必要,为什么不只在某些计算机上。 我可以<ScheduleReboot After="InstallFinalize"/> ,但是我希望有更好的解决方案。 因此,请随时回答以下任何一个问题:

  1. 此问题的最佳常规做法是什么? 我无法将所有内容打包到单个DLL中,因此我需要针对多个DLL的解决方案。

  2. 我该怎么做才能启用COM对象(通过使PATH的更改对系统的其余部分可见),而无需重新启动,用户重新登录或Explorer重新启动? Windows Installer是否广播WM_SETTINGCHANGE消息? 我应该以自定义动作播放它吗?

  3. 我如何才能检测并仅在需要时才要求用户重新启动/重新登录,而并非总是如此? (在某些计算机上不需要重新启动)

  4. 我如何安排比重新启动同样痛苦的事情呢?

我知道两种情况:

1)应用程序不支持WM_SETTINGCHANGE广播(通常由服务控制管理器托管)

2)MSI选择不发送广播时的行为。 Per WriteEnvironmentStrings操作

(强调)

运行WriteEnvironmentStrings操作或RemoveEnvironmentStrings操作时,正在进行的安装的环境变量不会更改。 在Windows 2000,Windows Server 2003,Windows XP和Windows Vista上,此信息存储在注册表中,并在安装完成后发送WM_SETTINGCHANGE消息以将更改通知系统。 另一个进程可以通过处理这些消息来接收更改的通知。 如果等待系统重新启动,则不会发送任何消息。 程序包可以使用MsiSystemRebootPending属性来检查系统重新启动是否挂起。

我通过编写.NET自定义操作(使用Environment类)解决了#2的问题,该操作进行了无意义的更改,只是为了使广播在MSI完成后才发生。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM