WiX 计划重新启动不遵守条件
本文关键字:条件 不遵守 重新启动 计划 WiX | 更新日期: 2023-09-27 18:31:33
>情况
我有一个由Windows Forms应用程序和Windows服务组成的应用程序。要安装这些组件,我使用的是WiX。到目前为止,一切正常,但是当我尝试在Windows XP上安装时,出现了问题。
当安装程序尝试在关闭安装之前启动服务时,它不起作用。我收到"用户无权启动"消息。
我从 .wxs 文件中删除了ServiceControl
块,再次构建,尝试安装并重新启动 PC(这在 Windows XP 上)。所以现在我的服务开始很好。
问题所在
我需要询问重新启动并从<Component>
禁用<ServiceControl>
,仅当Windows是XP并且Service Pack小于3时。
所以我试了这个:
<Product>
<!-- (...) -->
<InstallExecuteSequence>
<ScheduleReboot After="InstallFinalize">
<![CDATA[NOT (VersionNT <= 501 AND ServicePackLevel <> 3)]]>
</ScheduleReboot>
</InstallExecuteSequence>
<!-- (...) -->
</Product>
<!-- (...) -->
<Fragment>
<ComponentGroup>
<Component>
<File Id="ServExe" Name="Serv.exe" DiskId="1"
Source="Serv.exe" KeyPath="yes"/>
<ServiceInstall
Id="ServiceInstaller"
Type="ownProcess"
Name="Serv"
DisplayName="Serv"
Description="Serv"
Start="auto"
Account="[SERVICEACCOUNT]"
Password="[SERVICEPASSWORD]"
ErrorControl="normal" />
<ServiceControl Id="StartService" Start="install" Stop="both"
Remove="uninstall" Name="Serv" Wait="yes" />
</Component>
<!-- (...) -->
</ComponentGroup>
</Fragment>
但无论Windows如何(我尝试过XP,XP SP 2,XP SP 3,Windows 7),我总是得到"需要重新启动"对话框。而且我不知道如何在<ServiceControl>
中放置安装时间条件.
如何解决此问题?
在 InstallExecuteSequence 表中,仅当条件为 True 时才会执行操作。尝试像这样简化表达式:(版本NT = 501 AND ServicePackLevel = 3)。您可以使用 Orca 打开 msi 文件,并检查 InstallExecuteSequence 表是否在 ScheduleReboot 行中包含正确的条件记录。尝试创建安装的日志文件,并检查安装程序如何评估您的条件。