1. ホーム
  2. .net

[解決済み] Windowsサービスのインストールとリカバリーアクションによる再起動

2023-04-06 01:35:41

質問

Windows サービスのインストールに ServiceProcessInstallerServiceInstaller クラスがあります。

を使ったのは ServiceProcessInstaller を使用して、開始タイプや名前などを設定することができます。しかし 回復アクションを再起動に設定するにはどうすればよいですか?

サービスがインストールされた後、サービス管理コンソールに行き、サービスのプロパティの回復タブの設定を変更することで手動でできることは知っていますが、インストール中にそれを行う方法はありますか。

どのように解決するのですか?

リカバリーオプションを設定するには sc . 以下は、障害発生後にサービスを再起動するように設定します。

sc failure [servicename] reset= 0 actions= restart/60000

これは、C#から簡単に呼び出すことができます。

static void SetRecoveryOptions(string serviceName)
{
    int exitCode;
    using (var process = new Process())
    {
        var startInfo = process.StartInfo;
        startInfo.FileName = "sc";
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;

        // tell Windows that the service should restart if it fails
        startInfo.Arguments = string.Format("failure \"{0}\" reset= 0 actions= restart/60000", serviceName);

        process.Start();
        process.WaitForExit();

        exitCode = process.ExitCode;
    }

    if (exitCode != 0)
        throw new InvalidOperationException();
}