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 :

Attendre la fin d'un processus


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 17
    Par défaut Attendre la fin d'un processus
    Bonjour,

    J'ai mon programme qui lance un exécutable et je voudrai faire en sorte qu'il attende la fin son processus pour finir mon programme.

    J'ai bien essayer avec WaitForSingleObject, mais je bloque.

    Auriez-vous une solution a me proposer qui m'aiderai à comprendre comment réaliser ceci ?

    Merci d'avance.

    Bonne journée.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2008
    Messages : 50
    Par défaut
    tu peux utiliser un timer pour verifier que le processus et toujours actif :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Dim trouve As Boolean = False
            For Each pr As Process In System.Diagnostics.Process.GetProcesses
                If pr.ProcessName = "nom du processus" Then
                    trouve = True
                    Exit For
                End If
            Next
            If Not trouve Then
                Application.Exit()
            End If
     
     
        End Sub

  3. #3
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 17
    Par défaut
    Re bonjour,

    Merci pour l'aide, ca marche mais ca le problème est qu'il ne vérifie pas jusqu'à temps que le process soit finit.

    Il le trouve et quitte ce qui est normal d'après ce que j'ai compris au code.
    Si vous pouviez m'éclairer encore une fois.

    Bonne journée

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2008
    Messages : 50
    Par défaut
    En faite ce timer cera declanché quand vous lancer le processus , alors ce timer s'assure que le processus et toujours en cours d'exécution (toujours dans la liste des processus actifs) si ce n'est pas le Cas il va s'occuper de fermer le programme principale . C sa ce que voulai savoir ?

  5. #5
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 17
    Par défaut
    Ah oki, bon je m'en vais tester tout ca.
    Merci pour la réponse.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Par défaut
    Bonjour,

    Ci-joint un code vb6 à adapter pour .net (j'ai pas encore eu le temps de le faire).

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    Private Type STARTUPINFO
          cb As Long
          lpReserved As String
          lpDesktop As String
          lpTitle As String
          dwX As Long
          dwY As Long
          dwXSize As Long
          dwYSize As Long
          dwXCountChars As Long
          dwYCountChars As Long
          dwFillAttribute As Long
          dwFlags As Long
          wShowWindow As Integer
          cbReserved2 As Integer
          lpReserved2 As Long
          hStdInput As Long
          hStdOutput As Long
          hStdError As Long
       End Type
     
       Private Type PROCESS_INFORMATION
          hProcess As Long
          hThread As Long
          dwProcessID As Long
          dwThreadID As Long
       End Type
     
    Private Const NORMAL_PRIORITY_CLASS = &H20&
    Private Const INFINITE = -1&
     
     
    Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal _
          hHandle As Long, ByVal dwmilliseconds As Long) As Long
    Private Declare Function CreateProcessA Lib "kernel32" (ByVal _
          lpApplicationName As String, ByVal lpCommandLine As String, ByVal _
          lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
          ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
          ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As String, _
          lpStartupInfo As STARTUPINFO, lpProcessInformation As _
          PROCESS_INFORMATION) As Long
     
    Private Declare Function CloseHandle Lib "kernel32" _
          (ByVal hObject As Long) As Long
     
    Private Declare Function GetExitCodeProcess Lib "kernel32" _
          (ByVal hProcess As Long, lpExitCode As Long) As Long
     
     
    Private Function ExecCmd(cmdline$)
    Dim Ret&
          Dim proc As PROCESS_INFORMATION
          Dim start As STARTUPINFO
     
          ' Initialize the STARTUPINFO structure:
          start.cb = Len(start)
     
          ' Start the shelled application:
          Ret& = CreateProcessA(vbNullString, cmdline$, 0&, 0&, 1&, _
             NORMAL_PRIORITY_CLASS, 0&, vbNullString, start, proc)
     
          ' Wait for the shelled application to finish:
             Ret& = WaitForSingleObject(proc.hProcess, INFINITE)
             Call GetExitCodeProcess(proc.hProcess, Ret&)
             Call CloseHandle(proc.hThread)
             Call CloseHandle(proc.hProcess)
             ExecCmd = Ret&
       End Function
    En fait à regarder vite fait il y a juste à remplacer les "Long" par "Integer" et marshaller les string pour avoir le type attendu par l'API. Pour cela il faut regarder dans la MSDN avec comme clef de recherche "API32".

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

Discussions similaires

  1. Attendre la fin d'un processus
    Par nico_kurt dans le forum Delphi
    Réponses: 4
    Dernier message: 25/02/2007, 13h31
  2. Attendre la fin d'un processus en C++
    Par ToMs dans le forum Linux
    Réponses: 3
    Dernier message: 10/07/2006, 08h58
  3. Attendre la fin d'un processus
    Par biaggi dans le forum ASP
    Réponses: 3
    Dernier message: 27/07/2004, 08h39
  4. attendre la fin d'un processus
    Par philippe V dans le forum MFC
    Réponses: 2
    Dernier message: 27/02/2004, 15h37
  5. Comment Attendre la fin d'un Processus
    Par mr_titi dans le forum C++Builder
    Réponses: 3
    Dernier message: 05/06/2003, 16h35

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