我搜索过但没有找到合适的答案,所以我自己提出了一个问题。我们有几个 Windows 2003 SP2 服务器,每个服务器都运行从本地计算机和 Windows 共享启动的 .NET 服务。但第二次我们收到错误:错误 1053:服务未及时响应启动或控制请求 当尝试在一台特定服务器上重新启动服务时,第二台服务器正常工作。可执行文件共享可用,正常打开,具有正确的权限。因此,两台服务器上的所有内容看起来都一样,但其中一台服务器会将该错误发送给我们启动的所有服务。如果我们重新启动该服务器,它会正常工作几天或一周,然后再次启动。
有人能提出建议那是什么吗?
答案1
Microsoft 有一个可用的热修复程序
http://support.microsoft.com/kb/886695
出现此问题的原因是,Iisutil.dll DLL 向在系统上下文中运行的服务的桌面安全描述符添加了访问控制项 (ACE)。ACE 允许 Microsoft Internet Information Services 工作进程组 (IIS_WPG) 帐户登录到系统服务桌面。但是,如果另一个进程将在系统上下文中运行的服务的桌面安全描述符设置为空值,则 Iisutil.dll 会更改自由访问控制列表 (DACL)。Iisutil.dll 会更改 DACL 列表,以便使用非交互式本地系统帐户的任何服务都无法登录。
答案2
有人能提出建议那是什么吗?
这不是您想听到的,但几乎任何情况都有可能发生。目前,您真正知道的是服务有时启动或关闭时间过长。
您确实需要回去找开发.Net 服务的人,看看他们是否可以帮助您诊断问题。
但在此之前,我建议您不要使用重新启动,而是尝试将停止和启动服务作为两个不同的操作(中间有短暂的延迟)。这可能有助于确定问题是在关闭服务时还是在重新启动时。如果您能确定成功启动和停止需要多长时间,他们可能也会觉得这很有用。
您还应该检查事件日志以查看是否记录了任何其他信息。
当服务启动时,初始启动阶段应该在特定时间内完成(通常为 30 秒)。因此,服务通常会尝试将此部分中的代码量保持在最低限度,并启动后台线程来执行其余工作。
同样,当您停止服务时,它应该在特定时间内完成该过程(通常为 20 秒)。这意味着任何长时间运行的操作都应以这样的方式编写,即在服务关闭时可以取消该操作,而不是等到操作完成。
任何导致总启动或关闭时间超出限制的因素都会导致您看到的错误。
举几个可能导致错误的例子。假设在启动时,您的服务正在执行计算机/服务器名称的 DNS 查找。这通常需要几毫秒,但如果服务器上的 DNS 配置不正确,则可能需要 15 秒或更长时间才能完成,这可能足以使启动总时间超过限制。第二次尝试可能会缓存 DNS 条目,因此可以在适当的时间限制内完成。
另一种可能性是,该服务依赖于已进入休眠状态的设备或资源,而唤醒该设备所需的时间超出了限制。当您第二次尝试该服务时,该设备已经唤醒并及时做出响应。
如果 .Net 服务被广泛使用,您可能会很幸运地发现互联网上的其他人也遇到过类似的问题并找到了解决方案。但实际原因在很大程度上取决于服务在您启动和关闭时实际执行的操作,这就是为什么您最好与开发人员交谈的原因。