确定 .net Windows 服务无法启动的原因

9

我正在尝试确定为什么我可以成功安装在许多机器上的.Net服务无法在某些机器上启动。

当在这些机器上启动服务时,服务会立即停止,因此我的假设是用户没有足够的权限来安装服务或者服务存在问题; 但是,这两个条件都是错误的(服务可用且他们有足够的权限)。

有哪些步骤可以帮助我确定服务无法启动的原因?


由于这是一个 .Net 服务,是否安装了正确的 .Net 版本? - Hans Olsson
是的,看我的答案就知道我的解决方案了。 - msarchet
3个回答

7

应用程序事件日志应包含服务启动期间发生的任何 .Net 异常的详细信息。这可能有助于诊断问题。

或者,您可以在应用程序启动时添加一些调试代码(或跟踪代码),并使用来自Sysinternals的 DebugView 查看其运行到哪里。


服务消息存储在系统日志中。 - Ben M
+1:您还可以将调试器附加到服务并逐步执行它。 - Steven Evers
@Ben M:虽然你说的服务消息存储在事件日志中是正确的,但.NET异常会保存到应用程序日志中。 - Matthew Steeples

4

通过查看@Matthew Steeples和@Ben M的事件日志,我弄清楚了这个问题。

问题是当服务连接到服务器时,它会在启动时写入事件日志;然而,此计算机的事件日志已满,因此当服务尝试写入事件日志时,它失败了,导致它抛出异常,而这个异常无法写入满事件日志。

所以,要点在于,如果您正在写入事件日志,请确保它不是满的,或者您正在处理异常!


1
嗨,msarchet,StackOverflow遵循问答格式而非论坛格式。如果提供的答案足够满意,最好将其标记为已接受 - 发帖人会感激声望积分。同样,为了继续对话而向自己的问题添加答案不被鼓励,而是应该编辑原始问题并添加您自己找到的任何解决方案。 - Steven Evers
2
我想补充一点,如果没有其他答案帮助你解决问题,那么添加并接受自己的答案是可以接受的(请原谅双关语)。 - Erik Funkenbusch
5
实际上,这是可以接受的做法。提供的答案实际上并不正确,尽管它们指向了答案,但并不是真正的答案。元帖:http://meta.stackexchange.com/questions/14488/if-i-find-out-my-answer-why-do-i-have-to-wait-2-days-to-accept-it-closedhttp://meta.stackexchange.com/questions/2800/should-i-ask-questions-i-already-know-the-answer-to-and-answer-them-myselfhttp://meta.stackexchange.com/questions/12513/stack-overflow-should-i-answer-my-own-question-or-not - msarchet

2

请查看 事件查看器 -> Windows日志 -> 应用程序

这里应该显示未捕获的异常。在我的情况下,我期望当前目录是服务EXE的位置,但实际上它是 %WinDir%\System32,所以我需要修改我的应用程序来获取EXE目录,并在访问文件时使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接