我正在运行Win 7 Pro 64位。我使用.NET 4框架在C#中编写了一个服务。它安装正确并开始运行。我知道它运行是因为它将一些输出写入日志文件。然而,几秒钟后它就死了。当我使用Visual Studio 2010 Pro运行相同的代码而不是服务它永远不会死。因此,我显而易见的问题是关于调试这个问题的适当方法,因为我无法弄清楚为什么它应该作为服务而死,而不是作为非服务而死。我已经在代码中的几个地方写入了日志文件,但它似乎每次都在不同的地方死掉。该应用程序有3个线程。欢迎任何建议。
答案 0 :(得分:4)
如果您直接从Service的Start方法中运行代码,则很容易发生此行为。问题是服务的Start方法应该启动服务,立即返回。如果它在那里执行代码,Windows将终止你的服务。
处理此问题的正确方法是让服务的Start()方法在专用线程中运行代码。除了线程创建和立即返回之外,它不应该真正需要任何东西。如果这是问题所在,只需设置前台线程并将逻辑放在那里,它就可以正常工作。
答案 1 :(得分:0)
使用System.Diagnostics.Debugger.Launch
将其作为服务运行并进行调试。如果在该场景中没有崩溃,请添加其他日志记录,并确保添加顶级catch以写出任何错误。如果仍然没有这样做,则创建一个crashdump文件并使用SOS和windbg进行检查。