可能这不是一个严格的WIX问题,但它应该是一个众所周知的问题,与设置完善的最佳实践有关。我在Google上找不到这些做法。使用WiX 3.6,Windows 7,Visual Studio 2008,但安装必须支持Windows从XP到更新。必须在更改PATH后重新启动
我正在安装依赖于某些第三方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"/>
,但我希望有更好的解决方案。因此,请随时回答以下任何问题:
此问题的最佳常见做法是什么?我无法将所有东西都打包到一个DLL中,所以我需要一个针对多个DLL的解决方案。
我能做些什么来启用COM对象的使用(通过使更改为
PATH
对系统的其他部分可见),而不诉诸重新启动,或用户重新登录或重新启动资源管理器? Windows安装程序是否广播WM_SETTINGCHANGE
消息?我应该在自定义操作中播放它吗?我该如何检测并要求用户只有在需要时才重新启动/重新登录,而不是总是如此? (某些机器不需要重新启动)
我该如何安排比重新启动更轻松的工作?
流程会在开始时读取环境。你必须重新启动过程。这不需要重新启动,而是需要注销/登录周期。但是有些东西就像一个窗口消息,你可以发送给所有进程,其他进程*可以*处理这个消息。 http://stackoverflow.com/questions/11167854/sending-wm-settingchange-message-to-refresh-desktop-autoit-possibly – harper
承载COM对象的过程是什么?它在什么情况下运行? –
@ChristopherPainter不知道如何了解上下文,但我相信客户端进程正在托管对象(因此我推断Explorer对环境变化是无视的)。线程模型是公寓。接口类从'CComObjectRootEx'派生。 –
Dialecticus