Установка службы 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
Ответ 3
Я не считаю это частью .NET API, но это может помочь:
Расширение ServiceInstaller, которое позволяет восстановить конфигурацию восстановления и автозагрузки
Установите службу Windows так, как вы хотите! (Версия С#)
Ответ 4
Я нашел следующий проект, который позаботится об этих настройках, используя только код и вызовы Win API:
http://code.msdn.microsoft.com/windowsdesktop/CSWindowsServiceRecoveryPro-2147e7ac