.NET Windows服务的奇怪问题

Rob*_*oke 11 c# debugging windows-services

我有两个用C#编写的Windows服务,遵循相同的模式和方法.

这两项服务都针对在Windows Server 2008 VM上测试的Windows 7 VM和QA进行了开发测试.这两种服务在这些测试环境下已经安装和卸载多次,没有问题,但是在生产环境(Windows Server 2008)中安装后,两种服务中的一种拒绝启动.

要安装服务,我们使用InstallUtil.exe,ServiceInstaller和ServiceProcessInstaller组件附加到服务.

从各方面来看,失败的服务安装成功.InstallUtil.exe报告成功,服务显示在服务管理单元中.您还可以在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Blah Blah下的注册表中找到该服务.但是,如果您尝试启动该服务,则会获得以下内容:

net start blah.blah.exe"服务名称无效."

...或者通过服务管理单元..."Windows无法在本地计算机上启动"Blah Blah"服务.错误1053:服务没有及时响应启动或控制请求."

我已经将一些事件记录添加到服务类失败服务的构造函数中,但它似乎没有被调用.

由于这是一个生产盒,因此盒子上没有Visual Studio,远程调试是不可能的.

有没有其他方法让我获得有关失败服务未启动的原因的调试信息?

我有没有其他明显的理由可以看到这种问题?

编辑:我也应该提到.. Windows事件查看器中唯一的其他问题证据是来自服务控制管理器的系统日志中的两条消息:

"等待Blah Blah服务连接时达到超时(30000毫秒).

"由于以下错误,Blah Blah服务无法启动:服务未及时响应启动或控制请求."

编辑:已解决 此问题最终是一个配置错误和隐藏它的错误的组合.有关详细信息,请参阅下面的答案.

Rob*_*oke 8

Jeopardy答案:"无效的自定义配置与错误的全局异常处理程序如何在.NET Windows服务中表现出来?"

弄清楚了.

问题的根本原因是app.config中的自定义配置部分无效.我们使用自定义配置部分从app.config配置服务,并且ConfigurationSection派生类的程序集和命名空间最近已更改.

事实证明,我们的生产配置是在错误的程序集中查找自定义ConfigurationSection的定义,并且在未能实例化它时抛出的异常被一个错误隐藏,在该错误中,在服务生命早期捕获的异常将尝试记录到自定义日志而不是应用程序事件日志.(由于自定义事件日志中不存在事件日志源,因此这将从全局异常处理程序中引发另一个异常,并且该服务将在构造函数中死亡.)

第二个异常没有在任何地方记录,我们只通过代码检查找到它.

解决方法是修复配置并修改全局异常处理程序,以仅尝试使用服务名称作为事件日志源写入Application事件日志.(InstallUtil将服务名称注册为应用程序日志中的事件日志源.)

感谢大家的帮助!对不起,这个特殊问题最终对我们的设置非常具体.