2011-06-03 362 views
7

我有一个基本的C#控制台应用程序,我想作为Windows服务运行。将C#控制台应用程序作为Windows服务运行

我使用sc create创建了Windows服务。这工作得很好,我可以看到我的服务在services.msc。当我试着开始这项服务,我得到以下错误:

Could not start the PROJECT service on Local Computer. Error 1053: The service did not respond to the start or control request in a timely fashion.`

我看,这可能是由于服用时间超过30000  毫秒执行服务代码。因此,我删除了大部分的代码,几乎没有任何东西正在执行..但同样的错误仍然存​​在。

我在这个项目中使用.NET 3.5。

这会导致什么?

+0

你的过程是否真正开始?我怀疑这是开始失败, – zdan 2011-06-03 01:16:02

+0

http://stackoverflow.com/questions/593454/easiest-language-for-creating-a-windows-service/593803#593803 – 2011-06-03 07:38:21

回答

9

您不能只取任何控制台应用程序并作为Windows服务运行。首先,您需要实施可继承ServiceBase的服务类,然后在入口点(Main),您需要使用ServiceBase.Run(new YourService())运行服务。在你的服务类中,你需要定义服务开始和结束时会发生什么。

理想情况下,您应该将ServiceInstaller添加到您的程序集中。这样您就可以预设服务属性,并使用installutil.exe来安装服务。

+0

这是为什么呢? – wulfgarpro 2011-06-03 01:13:39

+1

@WulfgarPro - 因为windows服务应用程序有一点不同的体系结构。您需要定义在服务开始和结束时要执行的操作。 – 2011-06-03 01:15:47

+2

有一些工具可以让你在不修改的情况下作为服务运行控制台应用程序。例如下面这个:http://runasservice.com – 2013-09-25 02:17:33

0

我不知道“sc创建”是什么。但我知道,使用Visual Studio 2010,可以构建Windows服务项目。顺便说一下,我创建了这样一个项目,并且它一直工作得很好。

+0

'sc create'就是你如何安装windows服务,即使你的程序集里面没有安装程序。 – 2011-06-03 03:33:22

0

没有任何旧的应用程序可以作为服务运行,特别是在更新版本的Windows下。他们预计会支持某些功能,响应某些请求,并且(再次,在最新版本的Windows下)而不是直接与用户交互。

如果您想要服务,请编写专门设计为服务的应用程序。

0

why is this so? – wulfgar.pro Jun 3 '11 at 1:13

@WulfgarPro - because windows service application has a little different architecture. You need to define what to do when service starts and ends. – Alex Aza Jun 3 '11 at 1:15

(可惜我不能写一个评论。) 这是因为SCM(服务控制管理器)控制的保养槽ServiceBase类。如果只需要定义它在启动和停止时的功能,就不需要继承和重写。人们可以简单地创建这两种方法。不幸的是,由于ServiceBase包含了更多的功能,所以需要更多的工作。

0

我已经与TopShelf取得了巨大成功。这是一个nuget包,它允许.NET控制台应用程序也具有必要的Windows服务挂钩,以便它可以作为控制台应用程序(用于调试)很高兴地运行,或者作为Windows服务安装。

相关问题