Herve_be
Messages postés1015Date d'inscriptionmercredi 4 août 2010StatutMembreDernière intervention10 mars 2024
-
17 nov. 2016 à 17:25
vb95
Messages postés3472Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention13 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 ?
vb95
Messages postés3472Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention13 avril 2024169 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.