无法在“服务”窗口中启动Windows服务

时间:2019-08-22 09:36:34

标签: windows-services

这是Windows服务已在多台服务器上运行多年的故事,但由于某种原因,它将不再在一个特定的2012 Windows Server上启动。它在这台服务器上也运行良好,直到突然不工作为止(2019年6月26日)。

它给出的错误消息是通用的Error 1053: The service did not respond to the start or control request in a timely fashion。这几乎意味着一切。我遵循了其他SO问题的建议:

  • 我已将注册表中的ServicePipeTimeout设置为几分钟,然后重新启动了该服务。请注意,当我尝试在“服务”窗口中手动启动服务时,而不是在预期时间之后,会立即显示错误消息。
  • 我已卸载并重新安装了该服务。
  • 我在入口点附近设置了try-catch,试图将任何异常记录到EventLog中。没有这样的消息。再次注意,错误消息会立即出现。
  • 我已经检查过Windows Update,但是在服务停止时看不到任何更新。
  • 我已经检查了安装了哪个.Net Framework。该服务是4.6.1,似乎已经安装了4.7.1之前的所有内容。
  • 我试图将登录凭据转移给管理员用户。
  • 我已尝试按照此处所述为本地服务设置Allow service to interact with desktop(因为这很适合我的情况,但2003服务器除外):Link to similar 2003 Server problem
  • 未在服务器上安装windbg。

但是,我可以双击该exe文件。只要我不关闭打开的命令窗口,这实际上就可以工作。在“服务”窗口中,Windows服务仍然没有运行,但是现在只要我不关闭命令窗口或登录的会话,程序就在运行。这当然不是一个好的解决方案。

以下是启动代码:

using System;
using System.Diagnostics;
using Topshelf;

namespace Blabla.Endpoint
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                HostFactory.Run(x =>
                {
                    x.Service<EndpointConfiguration>(s =>
                    {
                        s.ConstructUsing(name => new EndpointConfiguration());
                        s.WhenStarted(tc => tc.Start());
                        s.WhenStopped(tc => tc.Stop());
                    });
                    x.RunAsLocalSystem();
                    x.SetDescription("Handles events for Blabla.Endpoint");
                    x.SetDisplayName("Blabla.Endpoint");
                    x.SetServiceName("Blabla.Endpoint");
                });
            }
            catch (Exception ex)
            {
                EventLog.WriteEntry("Application", ex.ToString(), EventLogEntryType.Error);
                throw;
            }
        }
    }
}

有什么想法我接下来应该尝试什么?

更新1
自从发布以来,我一直无法进行自己想要的研究,但是通过更仔细地查看EventLog(感谢@Rhizzakanizza),我发现在服务停止工作之前发生的最后一件事是服务器已通过C:\ WINDOWS \ CCM \ CcmExec.exe重新启动。

Google说:“进程ccmexec.exe(Microsoft SMS代理主机)是Microsoft SMS(系统管理服务器)套件的一部分,该套件主要用于将软件补丁分发到网络上的计算机。” (reference link)

在任何地方都可以看到它可能在2019年6月26日前后安装了什么吗?该日期附近没有Windows Update修补程序,但是很明显,此过程结合了一些更新来重新启动了服务器。

1 个答案:

答案 0 :(得分:1)

一些想法

将呼叫添加到EventLog.WriteEntry();作为main中的第一行。某些故障可能会通过尝试捕获而直接轰炸,尽管这种情况很少见。无论如何,我认为这将更明确地表明存在一个新的配置问题。

在服务启动期间检查安全日志中的活动。有一些区别,但是它们描述的关键症状与我最近遇到的症状相同。原来那是我试图使用的“登录身份”设置。请注意,我也在使用TopShelf。

最后,您从6月26日起回溯了多久?它可能不是Windows Update,但也许可以找到一些有关配置更改的证据。如果要投射更大的网络,请搜索文件系统以查看是否可以根据可能与症状相关的修改时间来识别任何有趣的更改。