Установите службу Windows с восстановлением для перезапуска - PullRequest
80 голосов
/ 27 октября 2009

Я устанавливаю Службу Windows, используя классы ServiceProcessInstaller и ServiceInstaller.

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

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

Service Property Recovery Tab

Ответы [ 4 ]

86 голосов
/ 29 июля 2011

Вы можете установить параметры восстановления, используя 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();
}
11 голосов
/ 06 февраля 2012

После многих попыток я решил ее, используя 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: обменивается данными с контроллером службы и установленными службами

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

8 голосов
2 голосов
/ 02 июля 2012

Я нашел следующий проект, который заботится об этих настройках, используя только код и вызовы Win API:
http://code.msdn.microsoft.com/windowsdesktop/CSWindowsServiceRecoveryPro-2147e7ac

...