.net - que - Instalar el servicio de Windows con la acción de recuperación para reiniciar
para que es windows recovery environment (4)
Estoy instalando un servicio de Windows usando las clases ServiceProcessInstaller
y ServiceInstaller
.
He utilizado ServiceProcessInstaller
para establecer el tipo de inicio, nombre, etc. Pero, ¿cómo configuro la acción de recuperación para reiniciar?
Sé que puedo hacerlo manualmente después de instalar el servicio yendo a la consola de administración de Servicios y cambiando la configuración en la pestaña de recuperación de las propiedades del servicio, pero ¿hay alguna manera de hacerlo durante la instalación?
Después de muchos intentos, lo resolví usando la aplicación de línea de comandos sc .
Tengo un archivo por lotes con installutil y sc. Mi archivo por lotes es similar a:
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
Si desea obtener la documentación completa del comando sc, siga este enlace: SC.exe: se comunica con el controlador de servicio y los servicios instalados
Nota: Necesita agregar un espacio después de cada símbolo igual (=). Ejemplo: reset = 300
Encontré el siguiente proyecto que se encarga de estas configuraciones, usando solo código y llamadas de Win API:
http://code.msdn.microsoft.com/windowsdesktop/CSWindowsServiceRecoveryPro-2147e7ac
No creo que sea parte de la API .NET, pero esto podría ayudar:
Una extensión ServiceInstaller que permite la recuperación y la configuración de inicio automático
¡Instale un servicio de Windows de la manera que USTED desea! (Versión C #)
Puede establecer las opciones de recuperación usando sc . Lo siguiente configurará el servicio para que se reinicie después de una falla:
sc failure [servicename] reset= 0 actions= restart/60000
Esto se puede llamar fácilmente desde 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();
}