none
[ServiceController] sur machine distante (VB NET 2003) RRS feed

  • Question

  • Bonjour,

    Je doit réaliser une petite application me permettant de lister les services sur un ordinateur distant (pour interragir avec eux par la suite).

     

    J'utilise donc la classe ServiceController qui me permet par la fonction ServiceController.GetServices(NomMachine) de récuppérer cette fameuse liste. Sur un réseaux appartenant à un domaine je n'ai pas eu de problème. Par contre sur un réseau appartenant à un groupe de travail il m'affiche cette erreur:

    "Impossible d'ouvrir le Gestionnaire de contrôle des services sur l'ordianteur 'NomMachine'. Cette opération requiert des privilèges supplémentaires."

    J'ai cherché un peu partout et j'ai pus remarqué que cette erreur est récurente pour des réseau hors domaine. Hors il faut absolument que mon application marche dans les deux cas. Le probleme avec la classe ServiceController c'est qu'on ne peut pas rentrer de login ou de mot de pass pour avoir acces pour obtenir ces fameux privilèges.

    Quelqu'un a t-il une solution pour lister les services d'un ordinateur distant pour un réseau hors domaine? Merci beaucoup, vous etes mon dernier espoire^^

     

    mon code:


            Dim StrMachine As String
            Dim ListeService As ServiceController()

     

            Try
                StrMachine = "NomMachine"
                ListeService = ServiceController.GetServices(StrMachine) 'Erreur déclenché à cette ligne

                For Each service As ServiceController In ListeService
                    MsgBox(service.ServiceName + ": " + service.Status.ToString)
                Next
            Catch ex As Exception
                MsgBox("Erreur: " + ex.ToString)
            End Try

     

    mercredi 17 octobre 2007 23:56

Réponses

  • Malheureusement, je ne crois pas que cela est possible, j'ai déjà tenter l'expérience par le passé et la seule solution fut dde créé une appli. client/serveur pour faire cela. Car pour des raisons de sécurité évidentes, on ne peut pas contrôler les ordinateurs à distance.

    jeudi 18 octobre 2007 00:41
    Modérateur
  • Pour faire très simple, tu crée une application cliente (sur la machine distante) qui elle pourra controler les services nécessaires. Ensuite, tu crée une autre application serveur(sur ta machine) qui au lieu de se connecter directement sur la machine avec le service controller, se connecte a l'application client et demande à cette application d'effectuer les tâches nécessaires. C'est sur que c'est plus d'ouvrage que de simplement essayer de connecter à distance directement, mais cela fonctionne bien.

     

    Donc nous avions créé une application client (installé sur plusieurs machines) et une application serveur (Installé sur un seul poste). Nous avons utilisé le .Net Remoting pour la connection entre les clients/serveur, utilisation de fichier XML pour les configurations et évidemment la classe Service Controller sur les clients.

     

    Je sais qu'ils vont (j'ai changé de compagnie depuis) modifier le code éventuellement pour utilisé le WCF du framework .Net 3.0.

     

    De plus, juste pour ton info, l'application surveillait les différentes machines clientes (Status,Disques durs, CPU, services, Telnet, web, base de données....) et envoyait une alerte dès l'atteinte d'un niveau critique à l'équipe de support.

     

    jeudi 18 octobre 2007 12:36
    Modérateur

Toutes les réponses

  • Malheureusement, je ne crois pas que cela est possible, j'ai déjà tenter l'expérience par le passé et la seule solution fut dde créé une appli. client/serveur pour faire cela. Car pour des raisons de sécurité évidentes, on ne peut pas contrôler les ordinateurs à distance.

    jeudi 18 octobre 2007 00:41
    Modérateur
  •  

    Ok, merci de ta réponse.

    Tu me parle d'une application client-serveur, dans les grandes lignes, qu'est-ce que cette application peut faire pour résoudre mon problème? (Classe utilisé, démarche, ce qui est installer sur leserveur, sur le client,....)

    Merci

    jeudi 18 octobre 2007 10:12
  • Pour faire très simple, tu crée une application cliente (sur la machine distante) qui elle pourra controler les services nécessaires. Ensuite, tu crée une autre application serveur(sur ta machine) qui au lieu de se connecter directement sur la machine avec le service controller, se connecte a l'application client et demande à cette application d'effectuer les tâches nécessaires. C'est sur que c'est plus d'ouvrage que de simplement essayer de connecter à distance directement, mais cela fonctionne bien.

     

    Donc nous avions créé une application client (installé sur plusieurs machines) et une application serveur (Installé sur un seul poste). Nous avons utilisé le .Net Remoting pour la connection entre les clients/serveur, utilisation de fichier XML pour les configurations et évidemment la classe Service Controller sur les clients.

     

    Je sais qu'ils vont (j'ai changé de compagnie depuis) modifier le code éventuellement pour utilisé le WCF du framework .Net 3.0.

     

    De plus, juste pour ton info, l'application surveillait les différentes machines clientes (Status,Disques durs, CPU, services, Telnet, web, base de données....) et envoyait une alerte dès l'atteinte d'un niveau critique à l'équipe de support.

     

    jeudi 18 octobre 2007 12:36
    Modérateur
  • Merci beaucoup,

    Effectivement cela est plus lourd surtout quand tu voi que dans un domaine tout ca n'est pas utile.

    En tout cas tes explications sont claires et me permette d'avoir une vision précise du travail à faire, merci.

    jeudi 18 octobre 2007 17:55
  • Tu pourrais pensez aussi à un truc hybride, pour que les machines sur le domaines n'aient pas à avoir le client, mais que le serveur soit celui qui contrôle directement.

    jeudi 18 octobre 2007 19:08
    Modérateur