我们有一个在 Windows Server 2008 R2 64 位上运行的自定义服务。它的启动类型为“自动”。但是,重新启动后,该服务不会自动启动。如果我们从服务控制面板手动启动它,它就会启动。这可能导致哪些原因,我该如何调试它?我检查了事件日志,没有发现任何特殊情况。
答案1
Microsoft Windows 服务控制管理器控制所有已安装 Windows 服务的状态(即已启动、已停止、已暂停等)。默认情况下,服务控制管理器将等待 30,000 毫秒(30 秒)让服务响应。某些配置、技术限制或性能问题可能会导致服务启动并向服务控制管理器报告准备就绪的时间超过 30 秒。
通过编辑或创建 ServicesPipeTimeout DWORD 值,可以覆盖服务控制管理器超时期限,从而为服务提供更多时间启动并向服务报告准备就绪状态。
怎样做?
- 转到“开始”>“运行”> 并输入 regedit
- 导航到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
- 选择控制文件夹后,右键单击右侧窗格并选择新的 DWORD 值
- 将新的 DWORD 命名为:ServicesPipeTimeout
- 右键单击 ServicesPipeTimeout,然后单击修改
- 单击“十进制”,键入“180000”,然后单击“确定”
- 重启计算机
笔记:上述建议将超时时间增加到 180,000 毫秒(3 分钟),但根据您的环境,可能需要进一步增加超时时间。请记住,增加此值可能会导致服务器启动时间更长。
答案2
在我看来,这听起来像是服务依赖关系问题。这是什么类型的服务?如果您能想到任何必须先启动的依赖服务,请将它们添加到 services.msc 中的服务属性的依赖列表中
答案3
您可以尝试修改登录用户。右键单击 Windows 服务项,然后选择“属性”,单击“登录”选项卡,在“以...身份登录”中选择“此帐户”,然后填写系统管理员用户名和密码。分配给服务的帐户可能没有正确的权限来实现服务的功能。例如,如果服务必须将数据写入驱动器,但用于服务的 ID 没有此权限,因此导致服务在启动时失败。
答案4
与 floyds 的回答类似,这可能是由于服务依赖性,或者因为它所依赖的资源在启动期间尚未准备好(例如网络资源)。您可以尝试将其启动类型设置为延迟启动,看看是否有帮助。