Executer un service a distance

cloud8716 Messages postés 1 Date d'inscription jeudi 30 novembre 2000 Statut Membre Dernière intervention 8 juin 2006 - 8 juin 2006 à 08:51
othmane1950 Messages postés 33 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 7 octobre 2010 - 10 août 2010 à 20:32
Bonjour,
Je suis debutant en C# et je dois faire un programme qui permet de lister, demarrer et arreter des services sur une machine distante.
Pour ce qui est de lister les services ca marche bien, mais impossible de lancer ou arreter un service, j'ai une erreur de type InvalidOperationException

Voila mon code :

using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceProcess;

namespace ConsoleApplication1
{

    class Program
    {
        static void Main(string[] args)
        {

            foreach (ServiceController service in ServiceController.GetServices())
            {
                Console.WriteLine(service.ServiceName + " : " + service.DisplayName + " : " + service.Status);              
            }
            Console.Read();

            ServiceController test = new ServiceController("Apache2");
            try
            {
                test.Stop();
            }
          
            catch (InvalidOperationException)
            {
                Console.WriteLine("Une erreur de type InvalidOperationException c’est produite");
            }

           
        }
    }
}

5 réponses

othmane1950 Messages postés 33 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 7 octobre 2010
29 juil. 2010 à 18:09
Bonjour
C’est un peut tard pour te répondre mais ben je laisse le commentaire pour d'autre gens si ça leur intéressent :

En premier lieu il faut ajouter le namspace System.ServiceProcess si jamais le .Net donne une erreur sur ça comme quoi il ne le reconnait pas (il faut allez sur référence clic droit de la souris ajout d'une référence ==> ça donne une fenêtre clic sur l'onglet .NET il faut choisir dans la liste System.ServiceProcess tu sélectionne et tu clic sur le bouton ok)

En deuxième lieu pour l'erreur InvalidOperationException avant tout il faut placer la ligne console.read après le catch et après il faut tester sur les 3 choses qui peuvent lever une exception et qui sont :
Le service n'existe pas.
Le service est arrêté alors qu'on veut l'arrêter.
Le service est démarré alors qu'on veut démarrer.
et ceci on étulisant ServiceControllerStatus.[Running | Stopped]

=> pour vérifier s'il existe il faut utiliser la boucle for que t'as mis en premier lieu mais pour qu'elle marche il faut la placer après la déclaration du service à arrêter ou démarre...

foreach (ServiceController service in ServiceController.GetServices())
{
Console.WriteLine(service.ServiceName + ":" + service.DisplayName + ":" + service.Status);
if (test.ServiceName==service.ServiceName)
{
Console.WriteLine("exist");
}

}

Ce que moi je veux faire c'est arrêter des services d'une machine à distance qui se troue dans le même réseau.
si vous avez la réponse veuillez me la communiquer merci.
mon Email : the_blues_man@live.fr
0
othmane1950 Messages postés 33 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 7 octobre 2010
4 août 2010 à 19:01
j'ai trouvé pour arrêter les services d'une machine distante (dans un réseau local)... il suffit juste de spécifier le nom de la machine ou son adresse ip
aussi il faut avoir les droits d'accès sur cette machine pour que vous puissiez accéder a ces services

donc on aurra quelque chose du genre :

For Each Service As ServiceController In ServiceController.GetServices("Nom_Machine/IP")
'On test si un service spécifique existe dans la machine cible
If (Service.DisplayName() = "Nom_Service_Spécifique") Then
'On test si le service spécifier est on état de démarrage
If Service.Status = ServiceControllerStatus.Running Then
'si le service est démarrer on fait notre traitement ex l'arrêter...
Service.Stop()
End If
Exit For

J'espère que ce code aidera quelqu'un.
Bien à vous.
Ro_Ot-m@n
End If
Next
0
cs_vagg Messages postés 102 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 janvier 2013
6 août 2010 à 10:38
Merci,

ça va beaucoup m'aider!
0
othmane1950 Messages postés 33 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 7 octobre 2010
6 août 2010 à 12:49
Ravie
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
othmane1950 Messages postés 33 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 7 octobre 2010
10 août 2010 à 20:32
Un petit plus...
si le serveur n'appartient au même domaine que celui ou l'application tourne...
vous aurez une erreur du genre 'privilège...'
pour ne pas tomber dans ce problème il suffit dans lancer la cmd suivante

net use \\IP_Ou_Nom_Serveur /USER:Administrateur_de_la_machine mot_de_passe

et après vous lancez le code normalement.

Bien à vous/.

Ro_Ot-m@n.
0
Rejoignez-nous