Installez le Service Windows avec une action de récupération pour redémarrer

J'installe un service Windows en utilisant les classes ServiceProcessInstaller et ServiceInstaller.

, j'ai utilisé le ServiceProcessInstaller pour définir le type de démarrage, nom, etc. Mais Comment définir 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?

Onglet Récupération De Propriété De Service

74
demandé sur Ray 2009-10-27 23:23:50

4 réponses

Vous pouvez définir les options de récupération à l'aide de sc. Ce qui suit définira le service pour redémarrer après un échec:

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();
}
79
répondu Kevin 2014-03-13 15:50:59

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

J'ai un fichier batch avec installutil et sc. Mon fichier batch 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

Remarque: Vous devez ajouter un espace après chaque égal (=) symbole. Exemple: réinitialiser= 300

10
répondu Juan Carlos Velez 2018-09-24 08:55:02

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

2
répondu Ron Klein 2012-07-02 11:32:04