Arrêter un service proprement
Bonjour à tous,
J'ai créé un service windows de déplacement de fichier et créé un installer avec WIX. Tout fonctionne parfaitement excepté l'arrêt du service en cas d'erreur.
Ma gestion des erreurs appelle la procédure suivante:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
private void StopError()
{
Library.WriteErrorLog("le Service MoveFiles est stoppé");
using (System.ServiceProcess.ServiceController serviceController = new System.ServiceProcess.ServiceController("MoveQCFiles"))
{
serviceController.Stop();
//serviceController.WaitForStatus(ServiceControllerStatus.Stopped);
}
} |
Mais cela ne fonctionne pas. J'ai bien le message "Le service MoveFiles est stoppé" dans mon fichier de log mais le service ne s'arrête pas...
Pour info, j'ai testé aussi:
- this.onstop ();
- this.stop();
J'appelle StopError de cette façon par exemple:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
private void VerifFolder()
{
NetworkShare.ConnectToShare(@"" + SourcePath, SourceLogin, SourcePassword);
if (!Directory.Exists(SourcePath))
{
Library.WriteErrorLog("Service Erreur: Le dossier Source " + SourcePath + " n'existe pas");
StopError();
}
NetworkShare.DisconnectFromShare(@"" + SourcePath, false);
if (!Directory.Exists(DestPath))
{
Library.WriteErrorLog("Service Erreur: Le dossier de destination " + DestPath + " n'existe pas");
StopError();
}
} |
Le service s'initialise ainsi:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
public Service1()
{
this.ServiceName = "MoveQCFiles";
this.CanPauseAndContinue = false;
this.CanStop = true;
this.CanShutdown = true;
InitializeComponent();
}
protected override void OnStart(string[] args)
{
// verification presence fichier config.xml
VerifAppConfig();
// ect...
} |
De plus j'ai un second problème qui découlle du premier. J'ai créé un installer qui installe le service en lancement automatique et qui le démarre directement. Du coup si les dossiers correspondant à SourcePath et DestPath n'existe pas, l'installation tourne en boucle et fini pas planter.
Comment faire pour créer un installer qui paramètre un demarrage automatique du service mais qui ne le lance pas à l'installation?
Merci pour votre aide