我制作了一个Window服务并让它自动工作并在localsystem帐户下,当服务启动时它会为我激发此消息然后停止
本地计算机上的[服务名称]服务已启动然后停止。如果某些服务未被其他服务或程序使用,则会自动停止。
问题是什么,解决方案是什么?
答案 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
文件中的设置错误,我遇到了同样的问题。我更改了设置并解决了问题