WiX ScheduleReboot不遵守条件

时间:2013-09-17 13:36:20

标签: c# .net wix wix3.6 wix3.7

场合

我有一个由Windows Forms应用程序和Windows服务组成的应用程序。要安装这些组件,我正在使用WiX。到目前为止一切正常,但是当我尝试在Windows XP上安装时会出现问题。

当安装程序在关闭安装之前尝试启动服务时,它不起作用。我得到“用户无权启动”消息。

我从.wxs文件中删除了ServiceControl块,再次构建,尝试安装并重新启动电脑(在Windows XP上)。所以现在我的服务很好。

问题

我需要询问有关重新启动的问题并从<ServiceControl>禁用<Component>,仅当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>中安装安装时间条件。

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

在InstallExecuteSequence表中,仅当Condition为True时才会执行操作。尝试简化表达式:(VersionNT = 501 AND ServicePackLevel = 3)。 您可以使用Orca打开msi文件,并检查InstallExecuteSequence表是否在ScheduleReboot行中包含正确的Condition记录。 尝试创建安装的日志文件,并检查安装程序如何评估您的状况。