ShellExecute

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Laurent
Le #23542251
"Roger" 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
Roger
Le #23542471

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
Bertrand Lenoir-Welter
Le #23542621
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.
Roger
Le #23545511
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 ?)
Bertrand Lenoir-Welter
Le #23547541
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.
Roger
Le #23549021
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...
Roger
Le #23549681
Autant pour moi, le DeleteFile marche très bien, c'est moi qui avais fait
une bêtise.
Désolé
Bertrand Lenoir-Welter
Le #23551341
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
Roger
Le #23551491
Ça fait la même chose. DeleteFile() est dans l'API Windows. remove() est
dans


Merci
RG
Publicité
Poster une réponse
Anonyme