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 :

programme qui appel des scripts VBS


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 16
    Points : 8
    Points
    8
    Par défaut programme qui appel des scripts VBS
    Bonjour,

    Je débute en C# (et en dev en général) et je suis face à un phénomène vraiment étrange...
    Je m'explique, j'ai commencé le dev en faisant des scripts VBS pour le boulot, comme je commence à en avoir un certain nombre à mon actif je me suis lancé dans le C#.
    Du coup mon premier prog en C# est une interface qui centralise mes différents scripts.
    Jusque là pas trop de difficultés tout fonctionne bien.
    Aujourd'hui j'ai terminé un script sur lequel je bossais, j'ai donc voulu l'ajouter à mon application C# pour pouvoir l'appeler à partir de mon interface.
    Le script vbs appelé (je précise qu'il marche nickel si je double click dessus) ouvre une fenêtre "parcourir" pour aller sélectionner un dossier, une fois le dossier sélectionner il va juste lister les fichiers contenue et me sors une liste.
    Le problème c'est que lorsque je l'appel à partir de mon prog la fenêtre parcourir ne s'ouvre pas, je n'ai pas d'erreur, le script tourne sans fin...
    A force de chercher j'ai trouvé un moyen de contournement mais je en comprends pas pourquoi ça fonctionne mieux comme ça... J'ai juste ajouté une msgBox au dessus de l'appel de cette fenêtre parcourir et là, quand je click sur le OK de la msgBox, miracle ma fenêtre parcourir s'ouvre et mon script va au bout du traitement sans problème...

    je vous colle mon code ça sera plus parlant :
    Comme ça ==> marche pas
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    Dim nbLine, titre, dossier, liste
    Set fso = CreateObject("Scripting.FileSystemObject" )
    dossier = select_a_folder("Sélectionner un dossier a lister : ","")
    titre = Replace(dossier, "\","")
    titre = Replace(titre, ":","")
    liste = "P:\listFiles_" & titre & ".txt"
     
    Function select_a_folder(message,directory)
    	Const WINDOW_HANDLE = 0
        Const NO_OPTIONS = 0
        Set objShell = CreateObject("Shell.Application" )
        Set objFolder = objShell.BrowseForFolder _
            (WINDOW_HANDLE, message , NO_OPTIONS, directory)
        On Error Resume Next
        Set objFolderItem = objFolder.Self
        If Err <> 0 Then
                wscript.quit
        Else
                select_a_folder = objFolderItem.Path
        end if
        On Error GoTo 0	
    End Function
     
    Set Folder = fso.Getfolder(dossier)
    Set listFile = fso.OpenTextFile(liste,2 ,true)
    nbLine = 0
    For each file in Folder.Files
    	listFile.writeline File.name
    	nbLine = nbLine + 1
    Next
    listFile.close
    Comme ça ==> marche !!

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Dim nbLine, titre, dossier, liste
    Set fso = CreateObject("Scripting.FileSystemObject" )
    msgBox "Début du script"
    dossier = select_a_folder("Sélectionner un dossier a lister : ","")
    titre = Replace(dossier, "\","")
    titre = Replace(titre, ":","")
    liste = "P:\listFiles_" & titre & ".txt"
    
    Function select_a_folder(message,directory)
    	Const WINDOW_HANDLE = 0
        Const NO_OPTIONS = 0
        Set objShell = CreateObject("Shell.Application" )
        Set objFolder = objShell.BrowseForFolder _
            (WINDOW_HANDLE, message , NO_OPTIONS, directory)
        On Error Resume Next
        Set objFolderItem = objFolder.Self
        If Err <> 0 Then
                wscript.quit
        Else
                select_a_folder = objFolderItem.Path
        end if
        On Error GoTo 0	
    End Function
    
    Set Folder = fso.Getfolder(dossier)
    Set listFile = fso.OpenTextFile(liste,2 ,true)
    nbLine = 0
    For each file in Folder.Files
    	listFile.writeline File.name
    	nbLine = nbLine + 1
    Next
    listFile.close
    Je sais qu'on est dans la section C# mais étant donné que le vbs fonctionne bien seul...
    Si je me suis trompé de section je m'en excuse d'avance.

    Merci d'avance pour votre aide

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    J'ai trouvé pourquoi ma popup n'apparait pas sans msgBox, dans mon code C# j'ai une option pour masqué une fenêtre console (contexte cscript.exe) mais j’exécute en wscript.exe du coup je pense que le programme considère cette fenêtre "Parcourir" comme une console à masquer.

    Voici ma fonction qui lance mon script:
    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
    public static void useProcess(string cheminScript, string scriptName)
            {
                //nouvelle instance de Process
                Process scriptProc = new Process();
                //mode d'ouverture sur script (wscript ou cscript)
                scriptProc.StartInfo.FileName = @"wscript";
                //chemin complet vers le script
                scriptProc.StartInfo.Arguments = "\"" + cheminScript + scriptName + "\"";
                //permet de ne pas afficher la console lors de l'éxécution du script
                scriptProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
                //lancement du process avec paramètre indiqué ci-dessus
                scriptProc.Start();
                //indique à l'application d'attendre que le process lancé (cscript ou wscript) s'arrette
                scriptProc.WaitForExit();
                // On libère les ressources dont on a plus besoin. Attention Close ne met pas fin au processus.
                scriptProc.Close();
            }
    le problème c'est qu'on sera amener à lancer mon prog depuis des serveurs qui utilise cscript et je ne veux pas voir la console masquer mon application...
    Donc la question est quelqu'un sait-il pourquoi le fait de mettre une msgBox permet d'afficher la fenêtre parcourir malgré le ProcessWindowStyle.Hidden?
    Comment faire la même chose sans passer par une msgBox qui demande une action de l'utilisateur? (pour que la fenêtre parcourir s'affiche directement...)

    Merci d'avance

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/12/2014, 11h49
  2. Réponses: 0
    Dernier message: 04/12/2014, 20h56
  3. [Débutant] Création d'une application Java qui appelle des scripts Perl
    Par dark_angel91 dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 31/05/2011, 20h31
  4. Debutant:création d'une application java qui appelle des scripts perl
    Par dark_angel91 dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 30/05/2011, 08h04
  5. [LG]programme qui renomme des fichiers
    Par Ne0taku dans le forum Langage
    Réponses: 9
    Dernier message: 16/02/2005, 22h18

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