来自我的wxs文件的片段:
<ServiceInstall Id="ServiceInstall" Type="ownProcess" Vital="yes"
Name="service name"
DisplayName="service display name"
Description="service description"
Start="auto" Account="[SERVICEUSERNAME]" Password="[SERVICEPASSWORD]"
ErrorControl="normal" Interactive="no" />
<ServiceControl Id="StartService"
Start="install" Stop="uninstall" Remove="uninstall"
Name="service name" Wait="yes">
<ServiceArgument>arguments for first run</ServiceArgument>
</ServiceControl>
如果服务无法启动,安装程序会在失败前等待几分钟,而应该能够检测到它处于停止状态,并且从那时起无法在没有人工干预的情况下达到启动状态。然而,它一直在等待。有什么方法可以解决这个问题吗?
答案 0 :(得分:0)
服务控制是基于消息的方案。 Windows Installer和服务控制机制等待服务从启动消息响应。它并不清楚你的意思是&#34;检测到它处于停止状态&#34;因为代码可能正在进行合法工作,可能已崩溃但有恢复代码,或者可能配置为在失败后重新启动(请参阅ChangeServiceConfig2 Win32 API)。
在您的情况下,您有wait = yes,这明确导致安装程序等待服务完全初始化。正如MSDN文档所说:
&#34;将此字段保留为空或输入值1会导致安装程序在继续操作之前等待最多30秒以使服务完成。等待可用于允许关键事件的额外时间返回故障错误。此字段中的值0表示仅等待服务控制管理器(SCM)报告此服务处于挂起状态,然后再继续安装。&#34;
因此,更改您的等待值可能有所帮助。无论如何,正常情况下正常启动的服务正常情况并不会导致任何这些问题。服务被破坏的事实不仅是一种罕见的情况(或应该是),但是当事情被破坏时,事实上它们已经被打破并且通常是不可预测的。