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 :

Lancer commande DOS selon cases cochées


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Lancer commande DOS selon cases cochées
    Bonjour,

    Je me lance dans la programmation VB et tente de créer déjà mon premier programme à l'aide de l'IDE VStudio2k8.
    Le programme que je souhaite créer est censé executer une commande DOS en fonction de ce qui sera coché dans le Formulaire.

    Le problème que je rencontre est justement dans l'execution de la commande.
    J'utilise un simple test de condition "Si caseA cochée alors "commande DOS".
    Je fais donc ça pour caque case mais, une fois les cases cochées, toutes les commandes se lancent en même temps.
    "Quand boutonRun appuyé"
    "Si caseA cochée alors CommandeDOS1"
    "Si caseB cochée alors CommandeDOS2"

    J'aimerai donc trouver un moyen pour que les commandes s'exécutent l'une aprés l'autre.

    Je colle un bout du code pour que les choses soient plus parlantes.
    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
    Public Class FPrincipal
     
        Private Sub FPrincipal_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim dirDossier1 As String = D:\mondossier...    
            Dim dirDossier2 As String = D:\mondossier2...   
        End Sub
     
        Private Sub Documents1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Documents1.CheckedChanged
     
        End Sub
     
        Private Sub Documents2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Documents2.CheckedChanged
     
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Lancer.Click
            If Documents1.Checked Then Shell("macommande maVariableDocuments1 leResteDeMaCommande") 
            If Documents2.Checked Then Shell("macommande maVariableDocuments2 leResteDeMaCommande") 
     
        End Sub
    End Class
    Google est mon ami, je cherche encore mais étant encore super débutant mes recherches sont limités ne connaissant pas forcément les bon termes.

    Merci d'avance à ceux qui voudront bien m'accorder un peu de leur temps.

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    à la place d'utiliser shell, essaye process.start
    la variable process a peut etre un truc pour attendre la fin du process (j'ai deja cru voir passer ca par ici)

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    je confirme : il y a une méthode WaitForExit dans la classe Process :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim p as Process
    p = Process.Start("macommande", "maVariableDocuments1 leResteDeMaCommande")
    p.WaitForExit()

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    et un de plus de sauvé

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Merci à vous pour vos réponse et la vitesse à laquelle vous m'avez répondu.
    Je test ça dans la soirée et vous tiens au courant.

    Voilà ce que j'obtien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim procDesktop As Process
    procDesktop = Process.Start("macommande")
    If Bureau.Checked = True Then procDesktop()
    Et sur ma denière ligne "procDesktop()" est souligné en bleu me disant que ça n'est pas une méthode...

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Tu t'es un peu mélangé les pinceaux je crois... comme l'indique le message d'erreur, procDesktop n'est pas une méthode : c'est une variable de type Process.
    Ensuite, tu lances le process (Process.Start) avant de faire le test sur la checkbox, donc le test ne sert plus à rien...
    Il faudrait plutôt faire un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim procDesktop As Process
    If Bureau.Checked = True Then
        procDesktop = Process.Start("macommande")
        procDesktop.WaitForExit()
    End If

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Oui tu crois bien
    Je refai un essai.

    Si je fais ce qui est indiqué il me dit que la variable est utilisée avant qu'une valeure lui soit assignée.

    Bon je verai ça demain. Trop fatigué là.
    Merci encore et bonne nuit.

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    ceci n'est qu'un avertissement
    pour le retirer il faut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim procDesktop As Process = Nothing

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Effectivement en rajoutant = Nothing je n'ai plus l'avertissement mais ma commande refuse de s'executer en tant que processus.
    Le code d'execution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim procDesktop As Process = Nothing
    If Bureau.Checked Then procDesktop = Process.Start("Robocopy " & dirDesktop & " Save\Bureau /S /Z /PURGE /XO")
    procDesktop.WaitForExit()
    dirDesktop est la variable contenant le chemin du répertoire Bureau.
    Je le dit au cas où...
    En Shell("macommande") cela ne pose aucun problème d'execution.
    Si ce n'est qu'il se lance sans savoir si il n'y a pas d'autre case de cochées.

    Le message d'erreur au lancement :
    ************** Texte de l'exception **************
    System.ComponentModel.Win32Exception: Le fichier spécifié est introuvable
    à System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
    à System.Diagnostics.Process.Start()
    à System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
    à System.Diagnostics.Process.Start(String fileName)
    à CoCCoSave.FPrincipal.Button1_Click(Object sender, EventArgs e)
    à System.Windows.Forms.Control.OnClick(EventArgs e)
    à System.Windows.Forms.Button.OnClick(EventArgs e)
    à System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    à System.Windows.Forms.Control.WndProc(Message& m)
    à System.Windows.Forms.ButtonBase.WndProc(Message& m)
    à System.Windows.Forms.Button.WndProc(Message& m)
    à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    à System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

    J'ai tenté de rajouter un : imports System.ComponentModel.Win32Exception
    En début de mon formulaire mais ça ne vient pas de là apparament.

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    system.ComponentModel.Win32Exception: Le fichier spécifié est introuvable

    => ca me parait assez clair


    process veut peut etre le chemin complet ...

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par sperot51 Voir le message
    system.ComponentModel.Win32Exception: Le fichier spécifié est introuvable

    => ca me parait assez clair


    process veut peut etre le chemin complet ...
    pas "peut-être", c'est une certitude

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Autre problème: avec Process.Start, il ne faut pas mélanger la commande avec ses paramètres. Ton instruction devrait plutôt ressembler à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Process.Start("C:\Dossier\Robocopy", dirDesktop & " Save\Bureau /S /Z /PURGE /XO")
    Sinon tu peux utiliser Shell quand même si veux... ensuite tu peux récupérer un objet process via le PID
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If Bureau.Checked = True Then
        Dim pid as Integer = Shell("Robocopy" & dirDesktop & " Save\Bureau /S /Z /PURGE /XO")
        Dim procDesktop As Process = Process.GetProcessById(pid)
        procDesktop.WaitForExit()
    End If

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Ca marche niquel !!!
    Un grand MERCI à tout le monde pour votre précieuse aide et votre patience.

    A bientot pour de nouvelles aventures

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Points : 7
    Points
    7

  15. #15
    Membre actif
    Avatar de adaneels
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Août 2006
    Messages : 236
    Points : 210
    Points
    210
    Par défaut
    Merci TomLev

    Le fait de séparer la commande des paramètres m'a aussi sauvé après quelques heures de débug & recherches !

    Et bravo au référencement de developpez.com pour référencer si bien et si rapidement des réponses qui date d'aujourd'hui.

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

Discussions similaires

  1. lancer Internet explorer pas une commande DOS
    Par dsr57 dans le forum Windows
    Réponses: 4
    Dernier message: 03/12/2010, 14h52
  2. Activer/Désactiver liste selon case cochée ou non
    Par miamou dans le forum VBA Access
    Réponses: 1
    Dernier message: 24/04/2010, 15h27
  3. [system] lancer une commande dos
    Par romuluslepunk dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 20/08/2005, 11h54
  4. Lancer des commandes dos à partir d'un fichier texte
    Par tpdm dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/08/2005, 16h56
  5. [Dos] Lancer une commande dos sans attendre la fin
    Par MrEddy dans le forum Windows
    Réponses: 4
    Dernier message: 09/06/2005, 17h38

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