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

VB.NET Discussion :

Commande Shell, et ses retours


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Par défaut Commande Shell, et ses retours
    Bonjour,

    Je fais mes premiers essais en vb 2010 (et vb tout court !) , aussi vais-je essayer d'être assez clair ...

    Dans un Form, je lance un exe via une commande shell. Le code du form attend que ce programme se termine. Ensuite, j'aimerais que le code enchaîne sur l'affichage d'un textbox et d'un button.

    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
     
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
     
     
            On Error GoTo erreur1
             Dim VarShellTest As String
     
            VarShellTest = Shell("C:\Program Files\CCleaner\ccleaner.exe", AppWinStyle.NormalFocus, True, 120)
            Label9.Visible = True
            TextBox1.Visible = True
            Label10.Visible = True
            TextBox2.Visible = True
            If VarShellTest > 0 Then
                TextBox1.Text = Now
                TextBox2.Text = "ici mes notes ... : "
            End If
            Teste_Programme(VarShellTest)
     
            Exit Sub
     
     
     
     
     
    erreur1:
            MsgBox("Impossible de contacter le serveur", vbCritical, "Erreur de connexion")
        End Sub
    Pour toute la première partie, ça fonctionne. En revanche, là où je sèche, c'est pour identifier le processus lancé, et comment déterminer s'il a été fermé, pour pouvoir afficher ensuite les infos complémentaires ...

    J'ai essayé avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oFoundProcess = System.Diagnostics.Process.GetProcessById(VarShellTest)
    Mais je ne sais pas comment articuler la chose, et encore moins si un tel enchaînement est possible.

    En espérant que vous pourrez m'apporter votre aide et quelques pistes ...

    Merci d'avance !!

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    utilises system.diagnotics.process à la place de shell, tu as un évènement pour la fin du processus
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Par défaut
    Merci Pol63 pour cette piste.

    J'ai pu progresser un peu, et cela fonctionne si je lance un exe "classique" comme notepad ou ccleaner.

    En revanche, je lance teamviewer, et il semble lancer lui-mêmeun process interne (pas un nouveau process). Du coup, mon code reçoit bien une fin, et continue.

    Voici la partie de code concerné :

    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
     
    Try
                processInfo = New ProcessStartInfo("C:\Program Files\TeamViewer\Version5\teamviewer.exe")
                processInfo.WindowStyle = ProcessWindowStyle.Normal
                processInfo.Arguments = "-i " & posid & " --Password " & posmdp
                monproc = Process.Start(processInfo)
     
                ' Boucle tant que le processus n'est pas terminé
                While Not (monproc.HasExited)
                    monproc.WaitForExit()
                End While
     
            Catch ex As Exception
                MsgBox("Impossible de lancer le programme" & vbCrLf & ex.Message)
            End Try
     
            Label11.Visible = True
            TextBox3.Text = Now
            TextBox3.Visible = True
            Button5.Visible = True
            TextBox2.Focus()
    Est-ce qu'il y a un moyen de gérer cela ?

    Merci d'avance ...

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    il faudrait trouver le nom de ce processus le rechercher et s'abonner à l'event de celui là
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Par défaut
    Merci pour l'info. j'ai fait beaucoup de recherches sur le web, et dois bien reconnaître que là, je suis largué ...

    Je connais le processus, mais je ne sais comment m'y abonner ...

    Aurais-tu un petit boute de piste pour moi ?

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    process.getprocessbyname je pense
    ou si ca n'existe pas faire un for each sur process.getprocesses()
    et une fois que tu as trouvé celui que tu veux tu addhandler dessus
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. [Système]Execution d'une commande shell
    Par n8ken dans le forum API standards et tierces
    Réponses: 24
    Dernier message: 29/03/2007, 04h36
  2. []Commande shell
    Par phoenix736 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 09/10/2005, 20h31
  3. [Debutant] Commande shell
    Par drosophile dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 21/04/2005, 15h06
  4. commande shell dans un programme
    Par diefo dans le forum C
    Réponses: 3
    Dernier message: 15/08/2003, 13h37
  5. [VB6] comment savoir si la commande shell est terminée ?
    Par ghyscharlotte dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 30/07/2003, 19h12

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