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

ShellExecute

9 réponses
Avatar
Roger
Bonjour,
Je voudrais avec un 1er programme en lancer un 2nd et terminer le 1er
programme immédiatement sans attendre la fin du second. Quand j'utilise
ShellExecute mon premier programme attend la fin du second pour se terminer
lui-même, ce n'est pas ce qui m'intéresse. Existe-t-il une autre fonction
API qui fasse ce que je souhaite ?
Merci

9 réponses

Avatar
Laurent
"Roger" a écrit dans le message de news:
4e162914$0$15048$
Bonjour,
Je voudrais avec un 1er programme en lancer un 2nd et terminer le 1er
programme immédiatement sans attendre la fin du second. Quand j'utilise
ShellExecute mon premier programme attend la fin du second pour se
terminer lui-même, ce n'est pas ce qui m'intéresse. Existe-t-il une autre
fonction API qui fasse ce que je souhaite ?
Merci



Pas clair
Après avoir appelé ShellExecute (), tu peux très bien terminer ton prog
sans t'occuper de
l'autre application qui a été lancée
Avatar
Roger

Pas clair
Après avoir appelé ShellExecute (), tu peux très bien terminer ton prog
sans t'occuper de
l'autre application qui a été lancée
Merci,


J'avais cru comprendre le contraire au vu des exemples donnés dans l'API, je
vais mieux vérifier. Merci
Avatar
Bertrand Lenoir-Welter
Après avoir appelé ShellExecute (), tu peux très bien terminer ton prog
sans t'occuper de l'autre application qui a été lancée



Je confirme. Inversement, pour attendre la fin de l'exécution du
programme appelé, j'utilise plutôt CreateProcess() avec
WaitForSingleObject(). Dans la boucle d'attente, ne pas oublier
d'appeler la pompe à messages pour au moins rafraîchir la fenêtre.
Avatar
Roger
Effectivement, autant pour moi, je viens de mieux tester, mon programme se
termine bien sans se préoccuper du programme lancé.

Par contre, si je peux me permettre une question subsidiaire, ce que je
voulais c'est que le programme qui a été lancé par shellexecute, supprime
ensuite le .exe qui l'a lancé (c'est pour ça que je voulais être sûr que le
lanceur n'était plus actif). Dans le programme lancé, je fais un Sleep de 2s
(pour être sûr que le lanceur est bien terminé) puis un DeleteFile du
lanceur. Je n'ai aucun message d'erreur mais le .exe du lanceur existe
toujours après l'opération. Je suppose que c'est parce que c'est justement
un .exe que ça ne marche pas. En effet quand on supprime un .exe avec
l'explorer ce dernier demande une confirmation "voulez-vous etc...".
Question y a-t-il moyen de passer outre ou éventuellement de lancer
l'explorer avec shellexecute en lui passant en paramètre le chemin du
fichier et le code fonction suppression, car en fait ça ne me gêne pas trop
qu'une confirmation soit demandée.
Merci

PS. Question idiote, ça veut dire quoi "amorcer la pompe à messages" (faire
une simple boucle GetMessage ?)
Avatar
Bertrand Lenoir-Welter
Tu peux effacer un exe depuis une appli, il n'y a pas de demande de
confirmation ni quoi que ce soit du genre. Simplement, ton appli doit
avoir droit d'accès dans le répertoire. 2 s peuvent ne pas suffire. Le
mieux est de boucler sur remove() jusqu'à ce que ça marche ou qu'un
timeout soit écoulé.

La pompe à message, c'est un simple appel à PumpWaitingMessages() dans
ta boucle. Mais attention à ne traiter alors que les messages genre
WM_PAINT sinon c'est l'appli qui repart.
Avatar
Roger
2 s peuvent ne pas suffire. Le
mieux est de boucler sur remove() jusqu'à ce que ça marche ou qu'un
timeout soit écoulé.



Merci, j'essaierai de boucler, mais c'est quoi cette fonction remove(), je
n'ai pas trouvé cette fonction dans mon API, moi j'ai utilisé DeleteFile(),
pour le cas où mon API ne serait pas à jour: j'ai fait l'essai de remplacer
DeleteFile par remove ça me sort 1 erreur de compile...
Avatar
Roger
Autant pour moi, le DeleteFile marche très bien, c'est moi qui avais fait
une bêtise.
Désolé
Avatar
Bertrand Lenoir-Welter
Merci, j'essaierai de boucler, mais c'est quoi cette fonction remove(), je
n'ai pas trouvé cette fonction dans mon API, moi j'ai utilisé DeleteFile(),
pour le cas où mon API ne serait pas à jour: j'ai fait l'essai de remplacer
DeleteFile par remove ça me sort 1 erreur de compile...



Ça fait la même chose. DeleteFile() est dans l'API Windows. remove() est
dans <stdio.h> qu'il faut inclure. Chacun ses petites manies...
Avatar
Roger
Ça fait la même chose. DeleteFile() est dans l'API Windows. remove() est
dans <stdio.h> qu'il faut inclure. Chacun ses petites manies...



Merci
RG