Установка службы Windows с восстановлением для перезагрузки

Я устанавливаю службу Windows с помощью классов ServiceProcessInstaller и ServiceInstaller.

Я использовал ServiceProcessInstaller для установки типа начала, имени и т.д. Но как установить действие восстановления для перезагрузки?

Я знаю, что могу сделать это вручную после установки службы, перейдя на консоль управления службами и изменив настройки на вкладке восстановления свойств службы, но есть ли способ сделать это во время установки?

Service Property Recovery Tab

Ответ 1

Вы можете установить параметры восстановления с помощью sc. Следующее приведет к перезагрузке службы после сбоя:

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

Это можно легко вызвать из С#:

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();
}

Ответ 2

После многих попыток я разрешил его с помощью командной строки sc.

У меня есть пакетный файл с installutil и sc. Мой командный файл похож на:

installutil.exe "path to your service.exe"
sc failure "your service name" reset= 300 command= "some exe file to execute" actions= restart/20000/run/1000/reboot/1000

Если вы хотите получить полную документацию команды sc, перейдите по этой ссылке: SC.exe: связывается с Service Controller и установленными службами

Примечание. После каждого символа равенства (=) вам нужно добавить пробел. Пример: reset= 300