Attendre la fin d'un ShellExecute

Signaler
Messages postés
905
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
19 septembre 2021
-
Messages postés
2473
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
22 septembre 2021
-
Bonjour,
Dans le but d'automatiser l'installation d'un logiciel pour un client je lui développe un installeur sur mesure qui doit entre autre exécuter le setup.exe et attendre qu'il soit terminé; voici mon code
    ProcessID = ShellExecute(Me.hwnd, "Open", "setup.exe", vbNullString, "C:\", SW_SHOWMINIMIZED)
If ProcessID <> 0 Then
Handle = OpenProcess(&H100000, True, ProcessID)
If Handle <> 0 Then
DoEvents
WaitForSingleObject Handle, INFINITE
CloseHandle Handle
DoEvents
Else
x = Err.LastDllError
End If
End If

setup.exe démarre correctement.
ProcessID = 42
Le problème est que Handle vaut toujours zéro.
J'ai ajouté la ligne qui va chercher Err.LastDllError qui vaut 87 = Invalid parameter
Une idée de la cause ?

1 réponse

Messages postés
2473
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
22 septembre 2021
141
bonjour Herve_be

Pour ton problème tu peux utiliser les fonctions de l'api Win32 pour lancer et attendre la fin d’exécution de ton application. Les fonctions a utiliser sont :

- CreateProcess pour créer un process exécutant l'application externe
- WaitForSingleObject ou WaitForMultipleObjects pour attendre la fin d’exécution selon le cas.

Je te conseille fortement de regarder l'aide de MSDN pour ces fonctions et les concepts de synchronisation dans Win32.

Je ne fais pas de VB6