93 votes

Installer le service Windows avec une action de récupération à redémarrer

Je suis de l'installation d'un Service Windows à l'aide de l' ServiceProcessInstaller et ServiceInstaller les classes.

J'ai utilisé l' ServiceProcessInstaller pour définir le type de démarrage, nom, etc. Mais comment puis-je régler l'action de récupération pour Redémarrer?

Je sais que je peux le faire manuellement une fois le service installé, allez à la console de gestion des Services et modifiant les paramètres de l'onglet récupération des propriétés, mais est-il un moyen de le faire lors de l'installation?

Service Property Recovery Tab

104voto

Kevin Points 1445

Vous pouvez définir les options de récupération à l'aide de sc . Les éléments suivants vont configurer le service pour qu'il redémarre après une panne:

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

Cela peut facilement être appelé à partir de 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();
}
 

14voto

Juan Carlos Velez Points 717

Après de nombreuses tentatives, je l'ai résolu en utilisant l'application en ligne de commande sc .

J'ai un fichier batch avec installutil et sc. Mon fichier de commandes est similaire à:

 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 vous voulez la documentation complète de la commande sc, suivez ce lien: SC.exe: communique avec le contrôleur de service et les services installés.

9voto

Philip Wallace Points 4550

2voto

Ron Klein Points 3409

J'ai trouvé le projet suivant qui gère ces paramètres, en utilisant uniquement le code et les appels Win API:
http://code.msdn.microsoft.com/windowsdesktop/CSWindowsServiceRecoveryPro-2147e7ac

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X