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?
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();
}
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
Je ne pense pas que cela fasse partie de L'API. net, mais cela pourrait aider:
Installez un service Windows comme vous le souhaitez! (Version C#)
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