IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Gestion d'un service Windows


Sujet :

C#

  1. #1
    Membre éclairé Avatar de keitaro_bzh
    Homme Profil pro
    Est-ce intéressant?
    Inscrit en
    Juin 2009
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Est-ce intéressant?

    Informations forums :
    Inscription : Juin 2009
    Messages : 320
    Points : 707
    Points
    707
    Par défaut Gestion d'un service Windows
    Bonjour à tous,

    J'ai un souci sur une petite appli que je suis en train de mettre en ouvre.
    Le but de cet appli est de relancer un service en cliquant sur un bouton. Ce service n'est pas un service que je développe mais un service tiers.

    Après multiples recherches, j'ai fini par utiliser le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    using System.ServiceProcess;
    ...
     
    ServiceController myService = new ServiceController();
    myService.ServiceName = "stisvc";
     
    MessageBox.Show(myService.Status.ToString());
     
     
    if (myService.Status == ServiceControllerStatus.Stopped)
    {
          myService.Start();
    }
    else if (myService.Status == ServiceControllerStatus.Running)
    {
           myService.Stop();
    }
    Quand je lance mon appli, j'ai bien le statut dans ma Messagebox, mais il me lève crie dessus "Exception levée*: 'System.InvalidOperationException' dans System.ServiceProcess.dll"

    J'ai beau tourner dans tous les sens, je ne comprends pas.

    J'ai utilisé ce code pour faire appel à un process, mais une invite de commande s'ouvre et se ferme aussitôt mais par de démarrage de mon service.

    Pensant à un problème de droit, je me suis mis dans le groupe Administrateurs du poste, et j'ai testé un simple NET START depuis une invite de commande, et le service se lance/s'arrête bien.

    J'ai du zappé un truc flagrant mais je ne sais pas quoi...

    Si vous avez des idées, je suis preneur.

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    tu as en effet zappé un gros truc ^^

    faire un new service n'est pas la solution, ca en créé un nouveau
    il te faut rechercher le service parmis la liste des services installés, il y a une collection de service sur laquelle tu peux faire un for each pour retrouver celui dont servicename est celui que tu cherches
    et après sur cette instance qui vient de la collection tu peux faire .Start

  3. #3
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    Tu peux regarder de ce côté ci

    et pour l'implémentation c'est ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    using (SvcManager s1 = new SvcManager("WinDefend")) {
    	if (s1.Installed) {
                if (s1.Running == false) {
    	        if (s1.StartupType == "Disabled") {
    		    s1.StartupType = "Automatic";
    	        }
    	        s1.Start();
                }
    	}
    }
    NB : bien évidement cette classe peut largement être améliorée pour une meilleure prise charge des statuts "en cours de ....." .

    Un convertisseur de code au cas ou :

    http://converter.telerik.com/


    A+

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 201
    Points : 5 795
    Points
    5 795

  5. #5
    Membre éclairé Avatar de keitaro_bzh
    Homme Profil pro
    Est-ce intéressant?
    Inscrit en
    Juin 2009
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Est-ce intéressant?

    Informations forums :
    Inscription : Juin 2009
    Messages : 320
    Points : 707
    Points
    707
    Par défaut
    Bon, j'ai essayé de coder durant le peu de temps libre de ma journée et en tenant compte de vos remarques ou m'inspirant de vos bouts de code et j'ai fait le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ServiceController[] services = ServiceController.GetServices();
     
    foreach(ServiceController s in services)
    {
           if (s.ServiceName == "stisvc")
           {
                 MessageBox.Show(s.Status.ToString());
                 MessageBox.Show( s.ServiceName.ToString());
                 s.Start();
           }
     }
    Je récupère bien le nom de mon service, ainsi que son statut, mais ça plante toujours au s.Start(). J'ai cela en plus comme information "Informations supplémentaires : Impossible d'ouvrir le service stisvc sur l'ordinateur '.'."




    J'ai tenté de convertir le code de wallace1 mais il ne connaît pas ManagementPath et ManagementObject. Du coup, j'ai essayé de bidouillé un peu de code mais la bidouille ne fonctionne pas dans le codage.. :s

  6. #6
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    bonjour,

    tu dois ajouter la reference : System.Management.dll depuis l explorateur de solutions .....puis importer l espace de noms dans ton code : System.Management (using system.management

    Ensuite l EDI reconnaitra les appels.

    @+

  7. #7
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 201
    Points : 5 795
    Points
    5 795
    Par défaut
    Bonjour je n'ai pas de problème avec ton code lorsque le service est arrêté.
    Si le service tourne déjà j’obtiens la même exception que toi.

    Sinon un problème de droits d'accès ?

  8. #8
    Membre éclairé Avatar de keitaro_bzh
    Homme Profil pro
    Est-ce intéressant?
    Inscrit en
    Juin 2009
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Est-ce intéressant?

    Informations forums :
    Inscription : Juin 2009
    Messages : 320
    Points : 707
    Points
    707
    Par défaut
    Mon service est bien arrêté dans le gestionnaire des services et dans le ServiceController.Status juste avec le s.Start().

    Pensant en effet à un problème de droit, je me suis ajouté au groupe Administrateur du poste.

    Est-ce que le fait que le PC soit membre d'un domaine et mon profil un profil réseau puisse en être la cause?

  9. #9
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 201
    Points : 5 795
    Points
    5 795
    Par défaut
    Il démarre avec un démarrage manuel ?
    Essaie de lancer ton programme en tant qu'administrateur.

  10. #10
    Membre éclairé Avatar de keitaro_bzh
    Homme Profil pro
    Est-ce intéressant?
    Inscrit en
    Juin 2009
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Est-ce intéressant?

    Informations forums :
    Inscription : Juin 2009
    Messages : 320
    Points : 707
    Points
    707
    Par défaut
    Citation Envoyé par wallace1 Voir le message
    tu dois ajouter la reference : System.Management.dll depuis l explorateur de solutions .....puis importer l espace de noms dans ton code : System.Management (using system.management
    Fait mais ne reconnaît par le Item du obj.Item (issue du traducteur)

    Citation Envoyé par ericlm128
    Il démarre avec un démarrage manuel ?
    Essaie de lancer ton programme en tant qu'administrateur.
    Oui, le service est en mode démarrage manuel. Et le fait de lancer VS en administrateur n'y change rien.

    J'ai tenté une compilation mais cela ne change rien non plus...

  11. #11
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par keitaro_bzh Voir le message
    Fait mais ne reconnaît par le Item du obj.Item (issue du traducteur)
    Un traducteur ne fait pas tout, ....il faut comprendre ce que fait le code.
    En l’occurrence, l'appel de la méthode GetPropertyValue sur obj avec un cast en String cela devrait résoudre ton problème !

    A+

  12. #12
    Membre éclairé Avatar de keitaro_bzh
    Homme Profil pro
    Est-ce intéressant?
    Inscrit en
    Juin 2009
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Est-ce intéressant?

    Informations forums :
    Inscription : Juin 2009
    Messages : 320
    Points : 707
    Points
    707
    Par défaut
    Citation Envoyé par wallace1 Voir le message
    Un traducteur ne fait pas tout, ....il faut comprendre ce que fait le code.
    Je le sais, mais j'apprends, donc je ne comprends pas encore tout :p
    Je vais tester dans la journée

Discussions similaires

  1. Gestion des services Windows
    Par AcidLines dans le forum VB.NET
    Réponses: 0
    Dernier message: 29/02/2012, 15h45
  2. Réponses: 3
    Dernier message: 30/09/2008, 11h36
  3. [Services Windows Media] pb sur la gestion des sélections de média
    Par guillaume_goupil dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 03/11/2006, 14h46
  4. gestion des Services Windows sans .NET
    Par zedoo dans le forum MFC
    Réponses: 1
    Dernier message: 16/05/2005, 23h52
  5. Routines de gestion des ports sous Windows XP
    Par wiccanhelios dans le forum Windows
    Réponses: 2
    Dernier message: 14/11/2003, 08h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo