PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Fermeture d'une fenêtre qui lance un executable
Fermeture d'une fenêtre qui lance un executable
Débuté par Kad, 11 sep. 2020 17:11 - 11 réponses
Posté le 11 septembre 2020 - 17:11
Bonjour,

J'ai une application qui se met à jour en cliquant sur le bouton "mise à jour", ce bouton lance un .exe d'installation et j'aimerais fermer l'application qui lance l'installation sans arrêter l'installation
SI LanceAppli(nom_fichier_maj_exe) = Faux ALORS
ExceptionDéclenche(1, "Erreur lancement installation: " + ErreurInfo(errMessage))
FIN

FinProgramme(Vrai)


Avec ce code je scie la branche sur laquelle je suis assis, pouvez vous m'aider s'il vous plait ?
Posté le 11 septembre 2020 - 19:49
Salut,

Voici une méthode que j'utilise :
Info("L'application va se terminer pour poursuivre la mise à jour")
LanceAppli(gsRepTemp + cFTPNOMAPPLI,exeActif,exeNonBloquant,gsRepTemp)
FinProgramme()

L'application qui lance la mise à jour est arrêtée et la mise à jour se poursuit.

Cdlt
Posté le 14 septembre 2020 - 16:26
Bonjour,

Merci pour votre réponse mais ça ne marche pas.
Ce bout de code ne me permet pas de garder la main sur l’exécutable lancé.
Le FinPogramme me ferme tout.
Posté le 14 septembre 2020 - 18:16
Bonjour,

Pourtant chez moi ça marche bien mon appli principale contient un bouton dans lequel il y a ce code

Lors de l'exécution du code l'installateur est lancé (c'est un autre .exe), le code continue et arrête l'appli principale, mais le deuxième Exe continue à s'exécuter.

Peut être que j'ai mal compris le besoin

Cdlt.
Membre enregistré
189 messages
Popularité : +4 (8 votes)
Posté le 15 septembre 2020 - 09:01
Bonjour,
Et si tu met ce code dans ton deuxième programme
SI ExeLancé("chemin complet de ton premier programme")= Vrai ALORS FinProgramme()

Bon dev
Membre enregistré
189 messages
Popularité : +4 (8 votes)
Posté le 15 septembre 2020 - 09:17
Autrement tu peux faire :
Dans ton premier programme :
LanceAppli("Le chemin et nom d'un fichier .bat",exeInactif,exeBloquant,"le nom du répertoire")
FinProgramme()

Dans le fichier .bat tu code 2 lignes:
le chemin et nom.exe de ton deuxième programme
exit
Membre enregistré
189 messages
Popularité : +4 (8 votes)
Posté le 15 septembre 2020 - 09:26
Bien sur les constances sont à choisir suivant ce que tu veux faire : exeInactif et exeBloquant voir l'aide de LanceAppli
Posté le 15 septembre 2020 - 12:29
Bonjour,

Merci à tous pour vos réponses.
Rien ne marche, mais je me pose une question est ce que c'est dû à mon semaphore ? car j'en utilise un.
Si oui, avez vous une solution ?

Merci
Posté le 15 septembre 2020 - 15:23
Désolé en fait non je n'utilise pas de Sémaphore
Membre enregistré
189 messages
Popularité : +4 (8 votes)
Posté le 16 septembre 2020 - 09:06
Bonjour
Et avec ce code pour tuer le processus:
Dans le premier programme
MonPID est un entier
MonPID = ExeDonnePID()
Tu passes en paramètre MonPID en appelant ton deuxième programme

Dans le deuxième programme:
Tu récupères le paramètre MonPID et après :
bRes est un booléen
bRes = ExeTermine(MonPID)
Membre enregistré
189 messages
Popularité : +4 (8 votes)
Posté le 16 septembre 2020 - 13:02
Bien sur en mode test cela ferme tes 2 programmes
Posté le 19 octobre 2020 - 16:33
Bonjour

J'essayai en mode Test du coup ça ne marchait pas. Merci maintenant ça marche.


Une autre question, je voudrai poursuivre mon code une fois que l'installation est terminée (Ici "Lanceappli" lance un exécutable qui me met à jour l'application qui utilise ce code) , dans ce cas je suis obligé de mettre une pop avec une question pour bloquer et pouvoir effecuter le reste du code, c'est pas top comme solution en avez vous une autre (la suite du morceau de code permet de lancer un service qui utilise cet exe ? Merci

SI LanceAppli(nom_fichier_maj_exe,exeActif,exeNonBloquant) = Faux ALORS

ExceptionDéclenche(1, "Erreur lancement installation: " + ErreurInfo(errMessage))
FIN


SI ServiceExiste(gNomService) ALORS
SI OuiNon("Voulez-vous relancer le service XXXXX ?") ALORS
SI ServiceEtat(gNomService) DANS (serviceEtatDémarré,serviceEtatEnPause,serviceEtatAttenteDémarrage) ALORS
RedemarrerService()
SINON
ExécuteTraitement(ONGLET.BT_INSTALL,trtClic)
FIN
FIN
FinProgramme(Vrai)
SINON
FinProgramme(Vrai)
FIN