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 :

Execution fichier bat a distance avec WMI


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Février 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 35
    Points : 20
    Points
    20
    Par défaut Execution fichier bat a distance avec WMI
    Bonjour,

    Je dois faire une application web qui doit exécuter un fichier bat a distance.
    En gros ce fichier bat lance une commande SAS.
    La machine qui exécute le fichier bat et le passage par un fichier bat me sont imposé.

    Voila le code que j'essaye de faire fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    object[] lanceur = { Properties.Settings.Default.Lanceur + " " + i_rblTypeEntetien.SelectedItem.Value + " " + i_tbComax.Text };
     
    ConnectionOptions oConn = new ConnectionOptions();
    oConn.Username = "[USER_ADMIN_DOMAINE]";
    oConn.Password = "[PASS]";
    oConn.Impersonation = ImpersonationLevel.Impersonate;
    oConn.Authentication = AuthenticationLevel.PacketPrivacy;
    oConn.EnablePrivileges = true;
    ManagementScope oLanceurScope = new ManagementScope("\\\\lyp1308f\\root\\cimv2", oConn);
    oLanceurScope.Connect();
    ManagementClass oLanceurClass = new ManagementClass(oLanceurScope, new ManagementPath("Win32_Process"), new ObjectGetOptions());
    oLanceurClass.InvokeMethod("Create", lanceur);
    Properties.Settings.Default.Lanceur contient le chemin vers le fichier bat ("C:\ENTRETIEN_VISION\lanceur_generation.bat")
    i_rblTypeEntetien est une checkbox avec 2 valeur soit R soit C
    i_tbComax est une textbox qui contient le numéro de client

    Le lyp1308f est la machine qui doit executer le fichier bat.
    Pour infos ce n'est pas un serveur mais une machine cliente sous XP.

    Pour moi c'est la 1ere fois que j'utilise WMI et je ne sais pas si je n'ai pas fait quelques erreurs ou oublis dans mon code.

    Visiblement quand j'essaye d'exécuter ce code je n'ai pas d'erreur mais il ne se passe rien.

    Merci d'avance pour votre aide.

  2. #2
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    Salut.

    Je n'ai pas épluché ton code en détails mais je pense que tu ne mets pas ta ligne de commande au bon endroit. Je te propose un test.

    Place ce bout de code quelque part :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public enum ProcessReturnValue {
        SuccessfulCompletion = 0,
        AccessDenied = 2,
        InsufficientPrivilege = 3,
        UnknownFailure = 8,
        PathNotFound = 9,
        InvalidParameter = 21,
        UnableToChangePriority = 22
    }
    Et tu exécutes ce traitement :
    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
    19
    20
    21
    // Bon ici j'ai pas trop pigé comment tu construisais ta ligne de commande donc j'improvise 
    string commandLine = @"C:\ENTRETIEN_VISION\lanceur_generation.bat";
    ConnectionOptions oConn = new ConnectionOptions();
    // Si possible utilise le nom complet du type "DOMAIN\USER"
    oConn.Username = "[USER_ADMIN_DOMAINE]";
    oConn.Password = "[PASS]";
    oConn.Impersonation = ImpersonationLevel.Impersonate;
    oConn.Authentication = AuthenticationLevel.PacketPrivacy;
    oConn.EnablePrivileges = true;
    // Si possible mets le nom complet de la machine "lyp1308f.dc1.dc2"
    ManagementScope oLanceurScope = new ManagementScope("\\\\lyp1308f\\root\\cimv2", oConn);
    oLanceurScope.Connect();
    ManagementClass oLanceurClass = new ManagementClass(oLanceurScope, new ManagementPath("Win32_Process"), null);
    // Tu récupères la liste des paramètres d'entrée de la méthode Create
    ManagementBaseObject inParams = oLanceurClass.GetMethodParameters("Create");
    // Tu affectes la ligne de commande
    inParams["CommandLine"] = commandLine;
     // Tu exécutes ta méthode et récupères les paramètres de sortie
    ManagementBaseObject outParams = oLanceurClass.InvokeMethod("Create", inParams, null);
    // Et tu récupères le statut du lancement du process
    ProcessReturnValue returnValue =  (ProcessReturnValue)Enum.Parse(typeof(ProcessReturnValue),  outParams["ReturnValue"].ToString())
    Voilà si tu peux dire ce que t'obtiens

  3. #3
    Membre à l'essai
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Février 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    Voila j'ai essayé le bout de code qui était peut différent du même sauf que tu gère les codes de retour.

    Le retour est le suivant : "SuccessfulCompletion" donc je pense que tout c'est bien passé.
    Quand je regarde sur la machine qui doit exécuter le fichier bat je voit bien dans les processus une ligne de commande s'exécuter puis lancer un service "SAS" mais visiblement il ne se passe rien.

    Le fichier bat est censé écrire dans un fichier log avant la commande SAS et pourtant je n'ai pas les logs.

    J'ai comme l'impression que le code WMI fonctionne et qu'il lance bien le fichier bat mais que j'ai un problème ailleurs.
    Je me trompe?

    Merci pour ton coup de main

  4. #4
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    Citation Envoyé par rochenico Voir le message
    J'ai comme l'impression que le code WMI fonctionne et qu'il lance bien le fichier bat mais que j'ai un problème ailleurs.
    Je me trompe?
    Je pense que tu as raison . Pour t'en assurer crée un .bat bidon qui contient uniquement le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "Test OK">>C:\TestBat.txt
    Exécute le avec ton code, et si t'as ton joli fichier en sortie tu auras un début de réponse .

  5. #5
    Membre à l'essai
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Février 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    Bon en fait je dois avoir un problème de droit.
    A partir du poste de dev ça se passe à peu près bien mais après avoir publier le site sur le serveur de prod ça ne marche pas du tout.

    Autant à partir du poste de dev je pouvais voir le process se lançait sur la machine qui exécutait le fichier bat autant depuis la machine de prod on voit très bien que rien ne se passe.

    Je pense qu'à partir de la machine de prod tout est exécuté avec les droits de IIS.

Discussions similaires

  1. Executer fichier bat et reg
    Par retwas dans le forum Langage
    Réponses: 2
    Dernier message: 13/08/2013, 17h39
  2. Erreur d'execution d'un job à distance avec Carte
    Par patrick21 dans le forum Pentaho
    Réponses: 0
    Dernier message: 20/06/2013, 07h56
  3. Executer fichier.exe en administrateur avec ShelleExecute
    Par keusty78 dans le forum C++Builder
    Réponses: 0
    Dernier message: 06/11/2011, 01h10
  4. executer fichier bat a partir script php4
    Par Miss kouka dans le forum Langage
    Réponses: 14
    Dernier message: 16/03/2011, 10h57
  5. Réponses: 26
    Dernier message: 05/10/2006, 17h27

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