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

Windows Forms Discussion :

[VB.NET2.0] lancer commade DOS cachée


Sujet :

Windows Forms

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut [VB.NET2.0] lancer commade DOS cachée
    bonjour,

    j'ai des fichiers executablent sous DOS

    j'aimerais lancer ces fichiers et recuperer les reponses => ça doit être possible...

    par contre, j'aimerais que tout cela soit invisible pour l'utilisateur => la j'ai un doute

    comment faire ?

  2. #2
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Lancer un exécutable
    Process mypro = Process.Start("chemin exécutable");
    // Récupérer le code de retour
    int ExitCode = mypro.ExitCode;
    Par contre pour que ce soit transparent pour l'utilisateur, à toi de faire tes exécutable qui ne s'affichent pas car je ne vois pas comment forcer ça via dotnet

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    merci

    j'arrive a lancer le programme par contre le probleme est que ça bug sur la deuxieme commande
    => je n'arrive pas a mettre les commandes a la suite

    si je fais ça, ça marche (à condition de ne pas appuyer sur bouton2 avant que la commande DOS n'est pas fini d'être executée)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim myProcess As New Process
    	Dim ExitCode As Integer
     
    	Sub Button1Click(sender As Object, e As System.EventArgs)
    		myProcess = Process.Start("C:\Documents and Settings\MARMONIER_C.IFOTEC\Bureau\test.bat")
    	End Sub
     
    	Sub Button2Click(sender As Object, e As System.EventArgs)
    		ExitCode = myProcess.ExitCode
    		msgbox(ExitCode)
    	End Sub
    par contre si je vais ça, ça bug :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim myProcess As New Process
    	Dim ExitCode As Integer
     
    	Sub Button1Click(sender As Object, e As System.EventArgs)
    		myProcess = Process.Start("C:\Documents and Settings\MARMONIER_C.IFOTEC\Bureau\test.bat")
    		ExitCode = myProcess.ExitCode
    		msgbox(ExitCode)
    	End Sub
    j'ai le message d'erreur suivant :
    Process must exit before requested information can be determined.
    => que faire ?

    lorsque je lance la commande une fenetre DOS s'ouvre mais rien ne s'affiche => est-il possible de ne pas voir cette fenetre DOS apparaitre ?

  4. #4
    Membre averti
    Inscrit en
    Août 2005
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 42
    Par défaut
    Désolée, je te réponds en C#.

    Il te manque pour attendre que le process est fini de s'executer.

    Ce qui te donne ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    System.Diagnostics.Process proc = new System.Diagnostics.Process();
    proc.StartInfo.FileName = "ton exe";
    proc.StartInfo.Arguments= "test arguments";
    proc.StartInfo.WindowStyle =ProcessWindowStyle.Hidden; //pour cacher la fenetre dos
    proc.Start();
    proc.WaitForExit();
    int exitCode = proc.ExitCode;
    proc.Close();

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    merci ça marche
    ... mais j'ai encore quelques questions

    1- je voudrais faire un label avec ecrit à l'interrieur "chargement..." => je voudrais faire une animation pendant en attendant la reponse du programme en faisant défiler les "..." => il me semble que ça doit être possible en executant de façon asynchrone les commande mais je ne m'y connais pas trop : comment fair e ?

    2- sous DOS, lorsque je lance mon fichier, il m'ecrit des choses dans la fenetre DOS : est-il possible de les recupérer ? a priori c'est possible mais je ne sais pas trop comment faire ? ça ne serait pas la propriété "StandardOutput" ?

  6. #6
    Membre averti
    Inscrit en
    Août 2005
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 42
    Par défaut
    Pour tes questions, il y a des réponses ici
    Bon courage

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    merci, ce lien est très interessant

    par contre j'ai un probleme : si je lance RequeteStop alors qu'il n'y a pas de requetes en cours, ça plante

    voila ce que j'ai fait mais ça ne 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Dim processInfo As ProcessStartInfo
    	Dim myProcess As Process
     
    	' création de la requète
    	Sub RequeteStart()
     
    		processInfo = new ProcessStartInfo()
     
    		' définition de la commande à executer
    		processInfo.FileName = "toto"
    		processInfo.Arguments = "-v 10"
     
    		' définition du mode de fontionnement
    		processInfo.UseShellExecute = false
    		processInfo.CreateNoWindow = true
    		processInfo.RedirectStandardOutput = true
     
    		myProcess = New Process()
    		myProcess.StartInfo = processInfo
     
    		' création d'un evenement
    		myProcess.EnableRaisingEvents = true
    		AddHandler Me.myProcess.Exited, AddressOf Me.RequeteEnd
     
    		myProcess.Start()
    	End Sub
     
    	' pour stoper la requete
    	Sub RequeteStop()
    		' erreur s'il n'y a pas de process actif
     
    		If myProcess.HasExited = False Then
    			myProcess.Kill
    		End If
    	End Sub
     
    	' s'effectue lorsque le process s'est terminé
    	Sub RequeteEnd(sender As Object, e As System.EventArgs)
     
    		msgbox(myProcess.ExitCode)
     
    		Dim myBuffer As String = ""
    		'myProcess.StandardOutput.Read(myBuffer,0,300)
    		myBuffer = myProcess.StandardOutput.ReadToEnd()
    		msgbox(myBuffer)
     
    		myProcess.Close
    	End Sub
    aussi, j'ai un autre probleme => comment faire pour lancer plusieurs requetes en meme temps ? c'est possible ?
    => j'ai une collection avec mes taches et je voudrais les lancé à la suite de façon asynchrone

    En gros j'aimerais avoir un tableau avec mes requetes (colonnes : ID, heure depart, heure arrivé, message) => quel control faut-il que je prenne ? ... je pensais prendre un datagridview : c'est ce qu'il y a de mieux ?

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    c'est bon j'ai résolu mes probleme saut :
    "par contre j'ai un probleme : si je lance RequeteStop alors qu'il n'y a pas de requetes en cours, ça plante"

  9. #9
    Membre averti
    Inscrit en
    Août 2005
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 42
    Par défaut
    Ca me parait normal que ça plante.
    Detruire quelquechose qui n'existe pas, ça provoque forcément une exception.
    Pourquoi tu mettrais pas un bloc Try Catch ?

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    Citation Envoyé par missinfo
    Pourquoi tu mettrais pas un bloc Try Catch ?
    parce que je ne connaissais pas cette commande...
    merci beaucoup

  11. #11
    Membre averti
    Inscrit en
    Août 2005
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 42
    Par défaut
    De rien, surtout que ça m'a permis de dépasser les 50 posts

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 18
    Dernier message: 10/04/2014, 13h18
  2. Lancer commande DOS selon cases cochées
    Par Hassassin dans le forum Windows Forms
    Réponses: 14
    Dernier message: 04/04/2008, 18h43
  3. Réponses: 3
    Dernier message: 21/08/2007, 07h39
  4. lancer l'application caché
    Par Nadirov dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 08/09/2006, 07h23
  5. lancer une page asp à partir du shell dos
    Par sqlnet dans le forum ASP
    Réponses: 3
    Dernier message: 19/11/2003, 15h20

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