我正在尝试使以下内容起作用:

在第一次安装程序时,它会修改系统的环境变量,因此您必须重新启动才能使程序完全运行。在 WiX 中执行此操作相当简单,您只需安排重新启动:

<InstallExecuteSequence>
    <ScheduleReboot After="InstallFinalize" />
</InstallExecuteSequence>

我遇到的问题是我希望能够对该程序进行小升级(版本号更改但产品 GUID 没有更改的程序)并且这不需要重新启动。

在我尝试让有条件重启工作时,我尝试这样做:
<Product
    ...
    Version="1.0.1"
    UpgradeCode="MYUPDATEGUID-C39B-4DDE-BA5B-6113463F60C2"
    ...
    >

<Upgrade Id="MYUPDATEGUID-C39B-4DDE-BA5B-6113463F60C2">
    <UpgradeVersion OnlyDetect="yes" Property="UPGRADING"
                    Maximum="1.0.1" IncludeMaximum="yes" />
</Upgrade>

...

<InstallExecuteSequence>
    <ScheduleReboot After="InstallFinalize">NOT UPGRADING</ScheduleReboot>
</InstallExecuteSequence>

这很好,除了它不起作用。无论我做什么,它总是尝试安排重新启动。

问题似乎是属性 UPGRADING --如果我用 NOT UPGRADING 替换 UPGRADING ,它从不请求重启。

任何比我更有经验的人的见解都会很棒。

最佳答案

我想知道更多关于您需要重新启动的初始假设。 WriteEnvironmentStrings 将广播 WM_SETTINGSCHANGE 并且正确编写的应用程序应该尊重它。缺少像 Win 95/98 这样的边缘情况以及服务控制管理器设计不佳并忽略这些消息的事实,我认为通常您首先不需要重新启动。

否则,如果您正在进行小规模升级,请考虑使用未安装属性。这将阻止它在后续维修、维护、移除、小升级和补丁期间运行。

WriteEnvironmentStrings Action

关于WiX 计划重启条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4056112/

10-12 05:50