如果服务没有开始,继续

时间:2013-02-13 13:02:51

标签: wix wix3.5 wix3.6

我正在安装Windows服务(实际上很少有),这是其中一个的片段:

<Component Id="cmpD9168A36C32F8D411B6EF4270EE6544F" Guid="{E5811AB8-0949-4C75-99BD-6687EB4672D4}" Win64="yes">
          <File Id="filD9168A36C32F8D411B6EF4270EE6544F" KeyPath="yes" Source="$(var.LoggerService.ProjectDir)\bin\LoggerService.exe" />
          <ServiceInstall
              Id="loggerServiceInstaller"
              Type="ownProcess"
              Vital="yes"
              Name="$(var.Manufacturer)LoggerService"
              DisplayName="$(var.Manufacturer)LoggerService"
              Start="auto"
              Account="[PROP_DOMAINUSER]"
              Password="[PROP_PASSWORD]"
              ErrorControl="ignore"
              Interactive="no">
            <ServiceDependency Id="LanmanWorkstation"/>
            <ServiceDependency Id="LanmanServer"/>
          </ServiceInstall>
          <ServiceControl Id="loggerStartService" Start="install"  Stop="both" Remove="uninstall" Name="$(var.Manufacturer)LoggerService" Wait="yes" />
        </Component>

现在,在安装期间,服务将尝试启动,但按设计可能会失败,并且没关系。但现在,当服务失败时,它会询问我是否要取消或重试。我怎么能忽略失败呢?

1 个答案:

答案 0 :(得分:4)

通常这是服务设计的问题。例如,我已经回答了有关StackOverflow的问题,其中开发人员说他们的服务在启动期间调用Web服务,并且需要更长的时间,然后MSI允许启动30秒。我的回答总是“真的??”。

这是糟糕的设计。服务的OnStart()应该什么都不做,然后启动后台工作线程并报告成功。那个线程应该初始化和处理工作。 OnStart的管道需要具有最小的依赖性和最短的执行时间。