C# WiX ScheduleReboot不符合条件 处境

C# WiX ScheduleReboot不符合条件 处境,c#,.net,wix,wix3.6,wix3.7,C#,.net,Wix,Wix3.6,Wix3.7,我有一个由应用程序和Windows服务组成的应用程序。要安装这些组件,我使用WiX。到目前为止,一切都很正常,但当我尝试在WindowsXP上安装时,出现了一个问题 当安装程序在关闭安装之前尝试启动服务时,该服务不起作用。我收到“用户没有启动权限”消息 我从.wxs文件中删除了ServiceControl块,重新编译,尝试安装并重新启动电脑(在Windows XP上)。所以现在我的服务开始得很好 问题 只有在Windows为XP且Service Pack小于3时,我才需要询问重新启动并从禁用 所

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

当安装程序在关闭安装之前尝试启动服务时,该服务不起作用。我收到“用户没有启动权限”消息

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

问题 只有在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>

3)]]>
但无论是Windows(我试过XP、XP SP 2、XP SP 3、Windows 7),我总是会看到“需要重新启动”对话框。我不知道如何在
中设置安装时间条件


如何解决此问题?

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

谢谢man的回答,但我在这里使用的表达式与您的建议的逻辑值不一样。我试图简化,但没有造成任何差异。在Orca中,条件是相同的。我犯了一个错误,正确的条件应该是(VersionNT=501,ServicePackLevel<3)。-如果没有NOT.ServiceControl,则不允许将条件用作子元素。您可以尝试创建两个组件项来安装同一个文件-一个用于XP SP3及更高版本,另一个用于其他文件。但在我看来,创建外部自定义操作dll来启动您的服务更简单。现在条件是正确的。但您说过ServiceControl不允许将Condition用作子元素。这不是真的,我移除了条件的左侧,并且工作,不是针对我的情况,而是针对一般情况。