2

我正在安装 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>

现在,在安装过程中,服务将尝试启动,但根据设计它可能会失败,但没关系。但是现在,当服务失败时,它会询问我是要取消还是重试。我怎么能忽略失败?

4

1 回答 1

4

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

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

于 2013-02-13T13:27:23.063 回答