Windows服务超时错误7000 7009

时间:2017-05-29 15:54:53

标签: vb.net service timeout topshelf

我在vb.NET中编写了一个Windows服务,使用Topshelf作为服务主机。 偶尔服务不会启动。在事件日志中,SCM写入错误7000和7009(服务未及时响应)。我知道这是一个常见的问题,但我(我想)我已经尝试了所有事情而没有结果。 该服务仅依赖于WMI,并且没有耗时的操作。 我读了这个问题(Error 1053: the service did not respond to the start or control request in a timely fashion),但没有一个答案适合我。

我试过:

  • 设置topshelf的开始超时。
  • 在" OnStart"的第一行请求额外时间方法
  • 设置一个周期性计时器,向SCM请求额外的时间。
  • 删除TopShelf并使用Visual Studio服务模板进行服务。
  • 移动初始化代码和" OnStart"代码到新线程以便立即返回。
  • 以RELEASE模式构建。
  • 在app.config文件中设置GeneratePublisherEvidence = false(每个应用程序)。
  • 未经检查"检查发布商的证书撤销"在互联网设置(每台机器)。
  • 删除所有备用流(如果某些dll被标记为网络并被阻止)。
  • 删除了所有"调试代码"
  • 将窗口的常规服务超时增加到120000毫秒。

此外:

  • 该服务不会以任何方式尝试与用户的桌面通信。
  • UAC已停用。
  • 服务在本地系统帐户上运行。

我认为服务本身的代码不是问题,因为:

  • 它已经生产了两年多。
  • 通常服务很好。
  • 事件日志中没有记录任何异常。
  • " On Error"服务的选项不被调用(因为服务实际上没有失败,只是没有响应SCM)
  • 我已经评论了几乎所有内容,追究这个错误! ; - )

任何帮助都是受欢迎的,因为我完全没有想法,而且我已经对此感到满意超过15天......

3 个答案:

答案 0 :(得分:0)

我遇到了70007009问题,由于A timeout was reached (30000 milliseconds)与以下内容之间的配置错误,该问题立即失败(即使错误消息显示TopShelf)。服务安装为。

最重要的是-您在HostConfigurator.SetServiceName(name)中传递的内容必须完全匹配 已安装的Windows服务的SERVICE_NAME

如果它们不匹配,它将立即失败,并且您会收到两条事件日志消息。

答案 1 :(得分:0)

对我来说,7009错误是由我的NET核心应用产生的,因为我正在使用此构造:

var builder = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json");
appsettings.json中显然找不到

C:\WINDOWS\system32文件。无论如何,将其更改为Path.Combine(AppContext.BaseDirectory, "appsettings.json")解决了该问题。

更多一般帮助-与事件查看器不同,对于Topshelf,您可以添加自定义异常处理,在其中我终于找到了一些有意义的错误信息:

HostFactory.Run(x => {
    ...
    x.OnException(e =>
    {
        using (var fs = new StreamWriter(@"C:\log.txt"))
        {
            fs.WriteLine(e.ToString());
        }
    });
});

答案 2 :(得分:-1)

安装Windows Creator版本更新后,我开始使用这项服务。基本上它使整个计算机变慢,这是我认为引发问题的原因。即使其中一个Windows服务存在超时问题。

我在网上学到的是服务的构造函数需要快速,但OnStart在SCM上有更多的余地。我的服务有一个C#包装器,它包含一个在构造函数中调用的InitializeComponent()。我把这个电话转移到OnStart上,问题就消失了。

相关问题