Windows 无法启动服务

5
我正在开发一个应用程序,可以安装并作为 Windows 服务运行。它仍然存在错误,并且停止得非常突然(Windows事件日志中也没有任何信息),而当我试图再次启动时,我遇到了错误:
Windows 无法在本地计算机上启动 {service名称} 服务。 错误1067:进程意外终止。
我重启了计算机(Server 2008 R2; 虚拟机,在某些情况下可能有影响),但没什么帮助。卸载并重新安装了我的服务,但仍然出现相同的错误!
需要清除/刷新计算机上的“某些”内容,以便再次尝试启动服务。 我不想重建整个虚拟机,但是已经没主意了。
更新: 我忘记提到这个 Windows 服务--完全相同的代码和安装--正在另外3台机器上运行,而没有出现以上错误。 在 OnStart() 中放入调试器似乎仍然是可行的方法。

3
通常这是由于未处理的异常所引起的。 - p.campbell
3
这意味着你的代码存在一些错误。检查事件日志以查看它给出了什么信息。另外尝试添加记录机制,这样你就可以知道哪里出了问题。 - Shyju
您的服务是否访问网络驱动器? - roymustang86
不幸的是,事件日志中没有任何显示,如果服务启动了,它必须在写入其日志文件之前失败了。是的,它确实访问一些DFS路径。 - East of Nowhere
@EastofNowhere,如果您提供主要关于启动的代码,我们可以审查它并可能找到可疑的代码。 - The Original Android
2个回答

9
如果您可以访问代码,可以在OnStart方法的第一行添加一个Debugger.Break方法。一旦"中断"应用程序,就可以查看异常抛出的位置。

我已经在OnStart()的第一行放置了Debugger.Break(),但它没有被触发 :( - Hari
@Hari,你能否再确认一下你的应用程序是否是使用 Debug 配置编译的(而不是 Release)? - oleksii
@oleksii 是的,我已经以调试模式编译了应用程序。我找到了问题所在。我使用 Visual Studio 中的“设置和部署”来托管服务,但它没有正确地托管服务(我也遇到了启动服务的问题)。后来,当我使用 installutil.exe 安装服务时,一切都很顺利,调试点也被触发了。无论如何,感谢您的回复。 - Hari

1

您可以将调试器附加到正在运行的服务上。详见调试 Windows 服务应用程序

很幸运,您可以轻松地复制问题。您可以安装带有代码的.NET Studio来调试您的问题。

另一种技术是将服务转换为常规应用程序。您知道嫌疑代码在启动期间。因此,只需在启动函数中创建带有代码的应用程序,并从那里开始调试即可。

祝好运,

Tommy Kwee


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