Windows服务自动停止

时间:2009-02-11 21:35:55

标签: c# .net windows-services

我制作了一个Window服务并让它自动工作并在localsystem帐户下,当服务启动时它会为我激发此消息然后停止

  

本地计算机上的[服务名称]服务已启动然后停止。如果某些服务未被其他服务或程序使用,则会自动停止。

问题是什么,解决方案是什么?

9 个答案:

答案 0 :(得分:38)

要么您没有在OnStart方法上启动任何线程来执行工作,要么在OnStart方法中引发异常。

如果抛出异常,它将出现在Windows事件日志中。无论如何,Windows事件日志都是一个很好的起点。

通常,OnStart方法如下所示:

Thread _thread;

protected override void OnStart(string[] args)
{
    // Comment in to debug
    // Debugger.Break()

    // Do initial setup and initialization
    Setup();

    // Kick off a thread to do work
    _thread = new Thread(new MyClass().MyMethod)
    _thread.Start();

    // Exit this method to indicate the service has started
}

答案 1 :(得分:6)

此特定错误消息表示其所说的内容 - 您的服务已启动,但由于某种原因很快退出。好消息是您的服务实际上正在执行某些事情,因此您可以配置可执行文件并作为服务正常运行。

一旦开始,由于某种原因它就会退出。你需要找出原因。添加一些调试来告诉您它的启动和运行以及已知的退出情况。如果这没有显示问题,那么添加一些调试,让你知道它仍在运行,并从停止时向后工作。

答案 2 :(得分:3)

您是否正在追踪任何调试信息?很可能在初始化期间抛出异常。我会找出所有异常并使用Debugview来查看它们。

答案 3 :(得分:3)

我遇到类似的问题因为我的事件日志已满且服务无法写入。因此,通过在事件查看器中查找消息无法进行调试。我把一个try / catch并将异常转储到一个文件中。我必须更改日志中的设置以根据需要而不是每7天进行填充,这样就可以启动服务。

当然,问题的根源在于我有一个nVidia驱动程序问题,它充斥着我的事件日志,现在我可能在磁盘上挨打,但这是另一个问题。

答案 4 :(得分:1)

我有同样的问题启动JBoss,然后我更改了JAVA_HOME变量,它对我有用。 JBoss版本不支持1.6,它支持1.5。

答案 5 :(得分:1)

也许您需要将服务作为本地系统帐户运行。请参阅this post by Srinivas Ganaparthi

答案 6 :(得分:0)

我有类似的问题,在我的情况下,程序只是在OnStart方法中崩溃。它试图读取一些它无法找到的文件,但我认为任何其他程序崩溃都会产生相同的结果。在Windows窗体应用程序的情况下,您会收到一些错误消息,但这只是"您的服务已启动并停止"

如果您需要,像我一样从Windows Service .exe所在的目录中读取某些文件,请检查以下主题: Getting full path for Windows Service

答案 7 :(得分:0)

在我的情况下,我的服务中的一个方法被递归调用(因为没有终止条件为真),并且在特定时间之后我的服务被停止了。

答案 8 :(得分:-5)

对我来说,由于app.config文件中的设置错误,我遇到了同样的问题。我更改了设置并解决了问题