安装Windows服务时出错--该服务未能及时响应启动或控制请求。

3
我有一个Windows服务应用程序,已经在我的计算机上安装成功。我想要将它安装到另一台计算机上,但是我收到了以下错误信息:
“错误1001。在安装提交阶段发生异常。此异常将被忽略并继续安装。但是,在安装完成后,该应用程序可能无法正常运行。无法在计算机‘。’上启动MyService服务。服务未能及时响应启动或控制请求。”
这个错误立即弹出,没有任何挂起。通常情况下,只有在出现挂起的情况下才会看到这个错误。
我使用的是.NET 4框架,两台计算机都已安装。我尝试禁用防病毒程序,以为它可能会干扰服务启动,但结果仍然是同样的错误。防火墙也已关闭。
还有其他原因导致这个问题吗?

几乎可以确定异常正在发生,很可能是在启动时。您是否记录那些本应逃脱您的服务实现的异常? - Kirk Woll
是的,在OnStart操作中,我正在捕获一个异常,其详细信息如下:异常消息: 无法在计算机“。”上启动服务CHD堆栈跟踪: 在System.ServiceProcess.ServiceController.Start(String[] args) at System.ServiceProcess.ServiceController.Start() at CHD.ProjectInstaller.OnCommitted(IDictionary savedState)来源: System.ServiceProcess 内部异常:System.ComponentModel.Win32Exception (0x80004005):服务未能及时响应启动或控制请求。 - Poosh
1
如果您可以告诉我们您的服务在开始时执行的工作,那将有助于我们回答您的问题。 - hatchet - done with SOverflow
另外,OnStart 方法必须在 30 秒内返回;通常您会在一个线程中启动服务,然后返回。请参阅 https://dev59.com/TnVC5IYBdhLWcg3wrDNd。 - dash
3个回答

3
感谢大家的帮助。我意识到问题是由于两台不同机器上安装的.NET Framework引起的。我的机器上安装了.NET Framework 4客户端配置文件和.NET Framework 4扩展版,而另一台机器上只安装了.NET Framework 4客户端配置文件。显然,服务中某些组件需要的库在.NET Framework 4客户端配置文件中不存在。

3
这种行为通常发生在WinService的OnStart方法中抛出异常并且没有在try-catch块中捕获。我相信您可以使用EventViewer检查异常消息和堆栈跟踪,如果不能,则可以使用EventLog类轻松实现简单的日志记录功能。
有时会抛出异常,因为服务未在特权帐户下运行。要解决此问题,您必须像以下方式配置安装程序的ServiceProcessInstaller对象
myServiceInstaller.Account = ServiceAccount.User;
myServiceInstaller.Username = "Domain name\User name";
myServiceInstaller.Password = "qwerty";

另一个常见的原因可能是有人忘记将其编译为 Windows 服务而不是 WinForms 应用程序。有时我也会忘记,因为我总是使用 WinForms 应用程序来调试服务。 - Tim Schmelter

1

由于您的服务在另一台计算机上运行,并且假设代码对两者都相同,问题可能与权限有关。请确保运行您的服务的帐户具有足够的权限来访问任何它写入文件的文件夹。如果您要写入事件日志,请确保服务帐户具有必要的权限。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接