Mat*_*att 12 windows-services windows-server-2003 .net-2.0
我有一个无法启动的Windows服务,给出错误"错误1053:服务没有及时响应启动或控制请求".
在我的调试器中运行服务工作正常,如果我双击远程计算机上的服务.exe弹出控制台窗口并继续运行没有问题 - 我甚至可以看到日志消息显示程序正在处理所有内容应该是这样的.
该服务以前运行良好,虽然这是我个人第一次尝试使用该程序的最新更改来部署它.我已经评估了这些变化,并且无法弄清楚它们可能会如何导致这个问题,特别是因为一切都运行良好,而不是作为服务启动.
服务impelmentation的StartRoutine()方法是空的,因此应该以"及时的方式"返回.
我已经检查了计算机上的事件日志,除了在30秒的必要时间内没有从服务中收到回复之外,它没有提供任何其他信息.
既然它可以在我的机器上运行,并且作为一个双击的可执行文件,我将如何找出它作为服务失败的原因?
哦,它是.NET 2.0,所以它不应该受到出现这种症状的1.1框架bug的影响(http://support.microsoft.com/kb/839174)
该框是运行SP2的Windows Server 2003 R2计算机.
这是一个误导性的错误.这可能是一个未处理的例外.
清空你的OnStart()处理程序,然后在你的构造函数中尝试这个...
public MainService()
{
InitializeComponent();
try
{
// All your initialization code goes here.
// For instance, my exception was caused by the lack of registry permissions
;
}
catch (Exception ex)
{
EventLog.WriteEntry("Application", ex.ToString(), EventLogEntryType.Error);
}
}
Run Code Online (Sandbox Code Playgroud)
现在检查系统上的EventLog是否存在应用程序错误.
可能有很多原因,它可能有助于在出现问题的机器上获取堆栈跟踪。有很多方法可以做到这一点,但重点是您必须查看代码中哪里失败了。
您可以通过远程调试来完成此操作,但一个简单的事情可能是仅记录到事件记录器或文件日志(如果有的话)。从字面上看,将“WriteLine(”At class::function()”) 放在代码的各个部分中,看看是否已成功实现。
这至少会让你朝着正确的方向寻找(最终是代码)。
更新:
请参阅 Microsoft 的如何调试 Windows 服务有关使用 WinDbg 排除启动问题的详细信息,
这个相关问题详细介绍了调试用 .NET 编写的服务的好方法。
| 归档时间: |
|
| 查看次数: |
55356 次 |
| 最近记录: |