自动服务无法启动

时间:2013-07-11 07:00:04

标签: windows-services windows-server-2008-r2 windows-server-2012 topshelf

我安装了一些控制台应用程序作为在topshelf下运行的服务,如果我手动安装和运行它们工作正常。但是,即使启动类型设置为“自动”,也不会自动启动。

应用程序配置如下:

HostFactory.Run(x =>
{
    x.Service<MyApp>(s =>
    {
        s.ConstructUsing(name => container.Resolve<MyApp>());
        s.WhenStarted(tc => tc.Start());
        s.WhenStopped(tc =>
        {
            tc.Stop();
            container.Dispose();
        });
    });

    x.RunAsLocalSystem();
    x.StartAutomatically();
    x.EnableServiceRecovery(rc => rc.RestartService(5));
});

应用程序在Win 2008 R2下运行,并使用以Admin身份执行的批处理文件进行安装。批处理文件包括以下内容:

app.exe install --sudo
app.exe start

执行批处理文件后,服​​务按预期运行。但是,如果我重新启动它们仍会停止。

事件日志为每个服务返回相同的事件对:

  

事件7000:由于以下错误,服务无法启动:   该服务未及时响应启动或控制请求。

     

事件7009:等待服务连接时达到超时(30000毫秒)。

重启后启动应用程序的唯一方法是从提升的命令提示符运行app.exe start

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

好的我已经修好了。服务启动类型设置为自动,但我已将它们更改为自动(延迟),所有现在都在启动时正常运行。

此外,我已修改安装批处理文件以供将来使用:

app.exe install --delayed --sudo
app.exe start

只是猜测,但可能依赖于可能无法使用的网络服务。

答案 1 :(得分:2)

最可能的答案是,在启动时,当机器上发生其他事情时,容器的创建和解决时间过长。当您手动执行此操作时,没有其他任何东西在争夺资源。你可以推迟在你的容器中完成的一些工作,直到创建之后。开始?您也可以请求更多时间,但我不记得那个API。