服务运行然后死亡

我正在运行Win 7 Pro 64位。 我使用.NET 4框架在C#中编写了一个服务。 它安装正确并开始运行。 我知道它运行是因为它将一些输出写入日志文件。 然而,几秒钟后它就死了。 当我使用Visual Studio 2010 Pro运行相同的代码而不是服务它永远不会死。 所以,我显而易见的问题是关于调试这个的适当方法,因为我无法弄清楚为什么它应该作为服务而死,而不是作为非服务而死。 我已经在代码中的几个地方写入了日志文件,但它似乎每次都在不同的地方死掉。 该应用程序有3个线程。 欢迎任何建议。

如果您直接从Service的Start方法中运行代码,则很容易发生此行为。 问题是服务的Start方法应该启动服务并立即返回 。 如果它在那里执行代码,Windows将终止您的服务。

处理此问题的正确方法是让服务的Start()方法在专用线程中运行代码。 除了线程创建和立即返回之外,它不应该真正需要任何东西。 如果这是问题,只需设置一个前台线程并将您的逻辑放在那里,它就可能正常工作。

使用System.Diagnostics.Debugger.Launch将其作为服务和调试运行。 如果在该场景中没有崩溃,请添加其他日志记录,并确保添加顶级catch以写出任何错误。 如果仍然没有这样做,则创建一个crashdump文件并使用SOS和windbg进行检查。