Attendre la fin d'un ShellExecute

Messages postés
420
Date d'inscription
mercredi 4 août 2010
Dernière intervention
13 décembre 2018
- - Dernière réponse : vb95
Messages postés
1727
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
14 décembre 2018
- 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 ?
Afficher la suite 

Votre réponse

1 réponse

Messages postés
1727
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
14 décembre 2018
0
Merci
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
Commenter la réponse de vb95

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.