【发布时间】:2010-07-27 17:54:07
【问题描述】:
我有两个使用 C# 编写的 Windows 服务,遵循相同的模式和方法。
这两项服务均针对 Windows 7 虚拟机进行了开发测试,并在 Windows Server 2008 虚拟机上进行了 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 服务无法启动: 服务没有及时响应启动或控制请求。”
编辑:已解决 这个问题最终是一个配置错误和一个隐藏它的错误的组合。请参阅下面的answer 了解更多详情。
【问题讨论】:
-
生产系统上是否安装了正确版本的 .NET?
-
@Matt 是的,这个 .NET 3.5 已经在生产环境中了。
-
只是在黑暗中拍摄:检查 Main 方法,默认情况下在 Program.cs 文件中。您说您将日志记录添加到服务类的构造函数中,但它似乎没有被调用。我会在 Main 方法的开头添加日志记录,以检查它是否被调用。可能是那里添加了一些初始化代码,在生产环境中运行不正常。
-
明白。不想在这里打败一匹死马,但我有一个基于 .NET 的 Windows 服务,它时不时地无法在目标系统上运行。在每种情况下,问题都是由于该系统上的 .NET Framework 未正确安装或缺少服务包所致。验证目标系统上的 .NET Framework 是否与测试系统上的 .NET Framework 匹配。如果您在测试系统上安装了 .NET 2.0/3.0/3.5 服务包,请确保它们在生产系统上。在一种情况下,重新安装 .NET Framework 为我们解决了问题。
-
为了澄清/补充 Matt 所说的内容,.NET 3.5 和 .NET 3.5 SP1 之间存在相当大的差异。您的生产机器上可能有 3.5,但您的代码很可能需要 SP1。
标签: c# debugging windows-services