2010-09-15 130 views
12

我的自动启动Windows服务无法在重新启动时启动。我有一个在C#中创建的Windows服务,并通过Wix创建的安装程序进行安装。该服务设置为自动启动。该服务已安装并在NT AUTHORITY \ NETWORK SERVICE下运行。当服务启动时,它首先进行外部Web服务调用。重新启动后Windows Service不会自动启动

在Windows 7中,我可以将服务设置为自动 - 延迟启动,服务将在重新启动时启动没有问题。然而,此选项不是在Windows XP中可用,而当设置为自动启动,服务失败,因为

A timeout was reached (30000 milliseconds) while waiting for the MyService service to connect.

如果我尝试登录过程后手动启动,该服务启动正常,它是只有当服务试图在重新启动时自动启动时出现问题时,才会导致我相信存在需要添加到服务中的依赖项服务才能正常启动。

任何人都可以指向正确的依赖关系或替代方法吗?

回答

11

你可能有一个依赖的竞争条件。你可以通过配置你的服务来依赖另一个服务(比如说tcp/ip)来解决这个问题,但是我真正要做的就是重写你的服务,以免在启动的关键执行路径中进行这个调用。它应该定期尝试在稍后进行web服务调用并记录有用的消息,或者在需要解决的问题时将消息发送到任务栏实用程序或类似程序。

+0

我已经考虑过这两者。问题在于调用是为了检索远程配置设置,因此是作为SettingsProvider的扩展内置到Settings中的。 – 2010-09-15 17:43:13

+1

对不起,但它需要完成。最基本的设计是脆弱的。 Web是无状态的,并假设它是其他的错误。 – 2010-09-15 17:52:03

+1

我接受了你的建议,并使我的OnStart()方法完成最低限度的功能,并启动一个Timer,稍后执行它以下拉配置设置并初始化服务功能。 – 2010-10-01 20:45:13

0

我在4台新服务器上遇到同样的问题。我将W32服务设置为自动延迟并解决了问题。