Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment lancer un process indépendant du lanceur

10 réponses
Avatar
Laurent Leleu
Bonjour,

J'ai une application A qui lance une application B qui elle même lance une
application C.
A doit attendre la fin de B, par contre B ne doit pas attendre la fin de C.
Mon problème est que lorsque B se termine, A devrait être débloquée. Hors A
manifestment toujours bloquée et attend la fin de C.
D'où ma question : comment B peut lancer complètement indépendemment C pour
ensuite se terminer tranquillement.
J'ai essai ShellExecute et CreateProcess sans succès.

Merci de votre aide.

10 réponses

Avatar
Thomas
Laurent Leleu wrote:
Bonjour,

J'ai une application A qui lance une application B qui elle même lance une
application C.
A doit attendre la fin de B, par contre B ne doit pas attendre la fin de C.
Mon problème est que lorsque B se termine, A devrait être débloquée. Hors A
manifestment toujours bloquée et attend la fin de C.
D'où ma question : comment B peut lancer complètement indépendemment C pour
ensuite se terminer tranquillement.
J'ai essai ShellExecute et CreateProcess sans succès.

Merci de votre aide.




Avec des threads ?
Avatar
Laurent Leleu
> Avec des threads ?



Non, je ne pense pas que des threads aident, l'application B s'arrête très
rapidement.
Je maitraise B et C, mais pas A.

Laurent.
Avatar
Patrick 'Zener' Brunet
Bonjour.

Je réponds à Laurent Leleu
qui dans 437dd607$0$21268$ a écrit :
Bonjour,

J'ai une application A qui lance une application B qui elle même
lance une application C.
A doit attendre la fin de B, par contre B ne doit pas attendre la fin
de C. Mon problème est que lorsque B se termine, A devrait être
débloquée. Hors A manifestment toujours bloquée et attend la fin de C.
D'où ma question : comment B peut lancer complètement indépendemment
C pour ensuite se terminer tranquillement.
J'ai essai ShellExecute et CreateProcess sans succès.




CreateProcess() est la bonne stratégie, il est anormal que A attende.

Est-ce que ce sont des process GUI ou bien console ? Il serait intéressant
de préciser le flag DETACHED_PROCESS à la création (lire la doc de
CreateProcess() pour les détails).

Ensuite, si la fonction a réussi, vous devez faire un CloseHandle() sur le
hThread ET le hProcess dans la PROCESS_INFORMATION restituée, et le fiston
est totalement émancipé.

Cordialement,

--
/***************************************
* Patrick BRUNET
* E-mail: lien sur http://zener131.free.fr/ContactMe
***************************************/
Avatar
Arnaud Debaene
Laurent Leleu wrote:
Bonjour,

J'ai une application A qui lance une application B qui elle même
lance une application C.
A doit attendre la fin de B, par contre B ne doit pas attendre la fin
de C. Mon problème est que lorsque B se termine, A devrait être
débloquée. Hors A manifestment toujours bloquée et attend la fin de C.
D'où ma question : comment B peut lancer complètement indépendemment
C pour ensuite se terminer tranquillement.
J'ai essai ShellExecute et CreateProcess sans succès.



Ca fonctionne sans problème avec CreateProcess. Tu fais comment pour
attendre la fin de B?

Arnaud
MVP - VC
Avatar
Laurent Leleu
Bonjour Patrick,

Oui, ce sont toutes les 3 des applications GUI.
Les 2 ClosesHandle sont déjà faits.
Pour l'instant je n'ai aucun flag de positionné.
Il faudrait donc mettre DETACHED_PROCESS ?

Merci.


"Patrick 'Zener' Brunet" a écrit dans
le message de news: 437e09da$0$21619$
Bonjour.

Je réponds à Laurent Leleu
qui dans 437dd607$0$21268$ a écrit :
Bonjour,

J'ai une application A qui lance une application B qui elle même
lance une application C.
A doit attendre la fin de B, par contre B ne doit pas attendre la fin
de C. Mon problème est que lorsque B se termine, A devrait être
débloquée. Hors A manifestment toujours bloquée et attend la fin de C.
D'où ma question : comment B peut lancer complètement indépendemment
C pour ensuite se terminer tranquillement.
J'ai essai ShellExecute et CreateProcess sans succès.




CreateProcess() est la bonne stratégie, il est anormal que A attende.

Est-ce que ce sont des process GUI ou bien console ? Il serait intéressant
de préciser le flag DETACHED_PROCESS à la création (lire la doc de
CreateProcess() pour les détails).

Ensuite, si la fonction a réussi, vous devez faire un CloseHandle() sur le
hThread ET le hProcess dans la PROCESS_INFORMATION restituée, et le fiston
est totalement émancipé.

Cordialement,

--
/***************************************
* Patrick BRUNET
* E-mail: lien sur http://zener131.free.fr/ContactMe
***************************************/




Avatar
Laurent Leleu
Bonjour Arnaud,

Je n'ai pas le source de A. Je vois juste que A reste figé, même après la
fin de B, il ne se débloque qu'à la fin de C.
Entre temps j'ai fait un essai en ajoutant le flag, mais ça ne change rien.


Merci.

"Arnaud Debaene" a écrit dans le message de
news: 437e1530$0$4355$
Laurent Leleu wrote:
Bonjour,

J'ai une application A qui lance une application B qui elle même
lance une application C.
A doit attendre la fin de B, par contre B ne doit pas attendre la fin
de C. Mon problème est que lorsque B se termine, A devrait être
débloquée. Hors A manifestment toujours bloquée et attend la fin de C.
D'où ma question : comment B peut lancer complètement indépendemment
C pour ensuite se terminer tranquillement.
J'ai essai ShellExecute et CreateProcess sans succès.



Ca fonctionne sans problème avec CreateProcess. Tu fais comment pour
attendre la fin de B?

Arnaud
MVP - VC




Avatar
Vincent Burel
"Laurent Leleu" wrote in message
news:437dd607$0$21268$
Bonjour,

J'ai une application A qui lance une application B qui elle même lance une
application C.
A doit attendre la fin de B, par contre B ne doit pas attendre la fin de


C.
Mon problème est que lorsque B se termine, A devrait être débloquée. Hors


A
manifestment toujours bloquée et attend la fin de C.
D'où ma question : comment B peut lancer complètement indépendemment C


pour
ensuite se terminer tranquillement.
J'ai essai ShellExecute et CreateProcess sans succès.



ben ShellExecute marche bien normallement, et l'appli A ne doit pas attendre
que l'appli B finisse, à moins que tu fasse un WaitForSingleObject derrière
ton ShellExecute...

VB
Avatar
Arnaud Debaene
Laurent Leleu wrote:
Bonjour Arnaud,

Je n'ai pas le source de A. Je vois juste que A reste figé, même
après la fin de B, il ne se débloque qu'à la fin de C.
Entre temps j'ai fait un essai en ajoutant le flag, mais ça ne change
rien.



Si tu n'as pas les sources de A, tu ne vas pas pouvoir faire grand chose...
Si tu as une connexion Internet musclée, tu peux configurer ton debuggger
pour qu'il aille chercher les symboles de l'OS sur le serveur de PDB de
Microsoft (set
_NT_SYMBOL_PATH=srv*c:localcache*http://msdl.microsoft.com/download/symbols
- cf la doc de WinDbg pour les détails) et essayer de deboger A pour
comprendre ce qu'il fait pour "attendre" (break dans A pendant qu'il est
figé et regarde sa call-stack).

Arnaud
MVP - VC
Avatar
Patrick 'Zener' Brunet
Bonjour.

Je réponds à Vincent Burel
qui dans 437e31df$0$6643$ a écrit :
"Laurent Leleu" wrote in message
news:437dd607$0$21268$
Bonjour,

J'ai une application A qui lance une application B qui elle même
lance une application C.
A doit attendre la fin de B, par contre B ne doit pas attendre la
fin de C. Mon problème est que lorsque B se termine, A devrait être
débloquée. Hors A manifestment toujours bloquée et attend la fin de
C.
D'où ma question : comment B peut lancer complètement indépendemment
C pour ensuite se terminer tranquillement.
J'ai essai ShellExecute et CreateProcess sans succès.



ben ShellExecute marche bien normallement, et l'appli A ne doit pas
attendre que l'appli B finisse, à moins que tu fasse un
WaitForSingleObject derrière ton ShellExecute...




AMHA même si A est conçue pour d'une manière ou d'une autre surveiller B
(flag DEBUG_PROCESS ? WaitFXO( hProcessB) ?), si j'ai bien compris le
problème, A continue à attendre C après la fin de B, et c'est B qui lance C.
Donc A ne peut pas étendre une telle "surveillance volontaire" à travers B.

C'est pour ça que j'avais posé la question des applis console, parce que
dans ce contexte, a priori en lisant la doc de CreateProcess(), sans la
specification de DETACHED_PROCESS, la console serait héritée (et donc
occupée par C).
Mais donc finalement il s'agirait d'appli graphiques, donc pas de console...

AMHA toujours, le problème peut venir d'une telle ressource (implicitement)
détenue par C et attendue par A... Mais quoi ?

S'il était possible de bricoler B pour lancer une autre appli à la place du
C actuel, ça pourrait valider ou infirmer...

C'est amusant, je viens justement de regarder NIH à la TV :-D

Cordialement,

--
/***************************************
* Patrick BRUNET
* E-mail: lien sur http://zener131.free.fr/ContactMe
***************************************/
Avatar
Laurent Leleu
Pour être tout à fait complet :
- A c'est Windows, plus exactement la procédure de déisnstallation
(ajouter/supprimer programmes). Voila pourquoi je n'ai pas le source ;-)
- B est mon programme de désinstallation.
- C est un programme de "secours" appelé au cas où la désinstallation se
passe mal.

Merci de votre aide.


"Laurent Leleu" a écrit dans le message de news:
437dd607$0$21268$
Bonjour,

J'ai une application A qui lance une application B qui elle même lance une
application C.
A doit attendre la fin de B, par contre B ne doit pas attendre la fin de
C.
Mon problème est que lorsque B se termine, A devrait être débloquée. Hors
A manifestment toujours bloquée et attend la fin de C.
D'où ma question : comment B peut lancer complètement indépendemment C
pour ensuite se terminer tranquillement.
J'ai essai ShellExecute et CreateProcess sans succès.

Merci de votre aide.