Execution d'une application, traitement en temps réèl du retour et envoie de don

Cseb1 Messages postés 3 Date d'inscription mardi 27 octobre 2009 Statut Membre Dernière intervention 27 octobre 2009 - 27 oct. 2009 à 09:44
Cseb1 Messages postés 3 Date d'inscription mardi 27 octobre 2009 Statut Membre Dernière intervention 27 octobre 2009 - 27 oct. 2009 à 10:32
Bonjour à tous,

J'ai un problème avec la commande proc.Start()
Suite à un click bouton, j'utilise un proc.Start()qui exécute une application. Mon problème vient du fait que tant que l'application ne s'est pas terminée, je ne peux pas traiter la sortie. Par conséquent, si l'application demande un mot de passe, j'ai une fenêtre dos qui reste inerte et à laquelle, je ne peux pas passer quoi que se soit. Comment faire pour interagir avec ce logiciel ?

Voici mon code. Je vérifie si un mot de passe est demandé. Si il l'est, je fait alors apparaitre une fenêtre demandant le mot de passe. Puis je le soumet à la console ... Enfin ca c'est plutôt ce que je voudrais faire :). Tel quel, la fenêtre demandant le mot de passe ne s'affiche qu'une fois le proc fermé. Merci à ceux qui ont pris le temps de lire jusque ici

proc.StartInfo.UseShellExecute = False
        proc.StartInfo.RedirectStandardOutput = True
        proc.StartInfo.WorkingDirectory = job_folder
        proc.StartInfo.FileName = "z:" & abaqus_exec
        proc.StartInfo.Arguments = " -j " & (New System.IO.FileInfo(OpenFileDialog1.FileName).Name) & " -cpus " & ComboBox_cores.Text
        Output(proc.StartInfo.FileName & " " & proc.StartInfo.Arguments)
        proc.Start()

        While Not proc.StandardOutput.EndOfStream
            out_lines = proc.StandardOutput.ReadLine.ToString
            Output(out_lines)
            If Not IsNothing(out_lines) Then
                If Not InStr(out_lines, "Enter the password for") = 0 Then
                    MsgBox("xxx")
                    LoginForm1.Show()
                    System.Windows.Forms.SendKeys.SendWait(LoginForm1.PasswordTextBox.Text)
                    wait(2000)
                    System.Windows.Forms.SendKeys.SendWait("{Enter}")
                    wait(2000)
                    System.Windows.Forms.SendKeys.SendWait("y")
                    wait(2000)
                    System.Windows.Forms.SendKeys.SendWait("{Enter}")
                    Output("reset")
                End If
            End If
        End While
        proc.WaitForExit()
        proc.Close()
        TextBox1.Text = ""
    End Sub

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
27 oct. 2009 à 10:09
Salut
Quel programme DOS lances-tu ?

Est-ce que ce programme accepte des paramètres en ligne de commande ?
par exemple : C:\monProg.exe /p monPassword

Si le paramétrage est toujours dans le même ordre, tu peux aussi utiliser un fichier texte dans lequel tu mets les données qui doivent être saisies après le lancement de ton programme DOS :
C:\monProg.exe <monFichierTexte.txt
- pas d'espace après le < donc utilisation de " si le chemin ou le nom du fichier comporte des espaces
- doit être le dernier paramètre de la ligne de commande

Je n'y connais pas grand chose en .Net, mais regarde dans la doc si tu peux gérer des "pipes" : Cela permet de lancer des commandes et de récupérer l'output en temps réel.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Cseb1 Messages postés 3 Date d'inscription mardi 27 octobre 2009 Statut Membre Dernière intervention 27 octobre 2009
27 oct. 2009 à 10:28
Salut,

Je vais rentrer un peu dans les détails, mais pour te répondre tout de suite , la réponse est non, on ne peu pas passer d'option au programme (enfin pas pour le pass). Le programme que j'execute s'appelle ABAQUS. Il va soumettre un calcul à un cluster de calcul (Windows HPC 2008). Pour 'discuter' avec le cluster, il initie une connexion a l'aide de job.exe qui fait partie du client microsoft HPC. Or lors de la connexion, job.exe vérifie si dans la base de registre se trouve déjà le mot de passe utilisateur(crypté). Si il n'y est pas, ou si le cluster lui répond que le pass n'est pas bon, ABAQUS propose alors un prompt qui demande mot de passe et ensuite si on veux l'enregistrer. Cette demande de mot de passe n'apparait donc chez les utilisateurs que lors de la première connexion ou lorsqu'ils ont changés leurs mot de passe. Voila :)

Pour terminé, je dirais que ce que je veux faire doit être très difficile, mais comme j'ai commencé le VB.net il y a 5 jours, même avec la meilleure volonté du monde, je n'arrive pas toujours à trouver la méthode pour réussir

Merci en tout cas d'avoir pris le temps de répondre.
0
Cseb1 Messages postés 3 Date d'inscription mardi 27 octobre 2009 Statut Membre Dernière intervention 27 octobre 2009
27 oct. 2009 à 10:32
C'est moi ou il n'est pas possible d'éditer un message posté ?
Ça m'aurais permis de corriger les fautes et surtout de modifier la phrase suivante (mais je suppose que vous l'aviez tous fait de vous même):


Pour terminé, je dirais que ce que je veux faire ne doit pas être très difficile
0
Rejoignez-nous