2009-10-27 8 views
71

Estoy instalando un servicio de Windows usando las clases ServiceProcessInstaller y ServiceInstaller.Instalar el servicio de Windows con la acción de recuperación para reiniciar

He usado 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?

Service Property Recovery Tab

Respuesta

73

Puede configurar las opciones de recuperación utilizando sc. Lo siguiente configurará el servicio para reiniciar después de un fallo:

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

Esto puede ser fácilmente llamado 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(); 
} 
+3

Tenga en cuenta que es necesario incluir el nombre del servicio entre comillas, si contiene espacios – user626528

+1

Consulte http://serverfault.com/a/48607/150286 para obtener más información sobre las opciones disponibles – Hans

+11

Si va a llamar esto desde el controlador de instalación del servicio Installer [] en C# cuando se instala el servicio, puede insertar este llame al controlador de eventos "Comprometidos" que lo ejecutará justo después de que aparezca el servicio en el Administrador de control de servicios. No lo coloque en el administrador de eventos "AfterInstall", ya que esto no funcionará la primera vez que se instale el servicio en la caja. – Contango

10

Después de muchos intentos, lo resolví usando sc aplicación de línea de comandos.

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 quieres la documentación completa del comando sc, siga este enlace: SC.exe: Communicates with the Service Controller and installed services

Nota: Es necesario añadir un espacio después de cada símbolo de igual (=). Ejemplo: reset = 300

Cuestiones relacionadas