Attendre la fin d'un ShellExecute

Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 - 17 nov. 2016 à 17:25
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 - 17 nov. 2016 à 19:53
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

vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
17 nov. 2016 à 19:53
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
0
Rejoignez-nous