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

OK、私はそれを修正しました。サービスのスタートアップの種類は自動に設定されていましたが、自動 (遅延) に変更したところ、起動時にすべて正しく実行されるようになりました。

また、将来の使用のためにインストール バッチ ファイルを変更しました。

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

推測にすぎませんが、利用できないネットワーク サービスに依存している可能性があります。

于 2013-07-14T02:46:05.750 に答える
2

最も可能性の高い答えは、マシンで他のことが起こっているときに、起動時にコンテナーが作成されて解決されるまでに時間がかかりすぎることです。手動で行う場合、他にリソースを争うことはありません。作成および開始後まで、コンテナで行われた作業の一部を延期できますか? より多くの時間をリクエストすることもできますが、その API を頭の中で思い出すことはできません。

于 2013-07-11T11:54:43.350 に答える