我正在安装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>
现在,在安装期间,服务将尝试启动,但按设计可能会失败,并且没关系。但现在,当服务失败时,它会询问我是否要取消或重试。我怎么能忽略失败呢?
答案 0 :(得分:4)
通常这是服务设计的问题。例如,我已经回答了有关StackOverflow的问题,其中开发人员说他们的服务在启动期间调用Web服务,并且需要更长的时间,然后MSI允许启动30秒。我的回答总是“真的??”。
这是糟糕的设计。服务的OnStart()应该什么都不做,然后启动后台工作线程并报告成功。那个线程应该初始化和处理工作。 OnStart的管道需要具有最小的依赖性和最短的执行时间。