5

我安装了一些控制台应用程序作为在 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 下运行,并使用以管理员身份执行的批处理文件进行安装。批处理文件包括以下内容:

app.exe install --sudo
app.exe start

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

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

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

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

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

有任何想法吗?

4

2 回答 2

4

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

我还修改了安装批处理文件以供将来使用:

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

只是猜测,但可能取决于可能不可用的网络服务。

于 2013-07-14T02:46:05.750 回答
2

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

于 2013-07-11T11:54:43.350 回答