process d'application vb resistant même apres fermeture - VB/VBA/VBS - Programmation
Marsh Posté le 06-05-2003 à 11:17:28
aaaaah un vrai problème bien foutu
bon voyons voir, ton applic est elle est grosse point de vue EXE? combien? T'as des classes et tout dedans? T'utilises des ActiveX externes à ton applic? Donne nous quelques détails de ce genre, ça pourrait aider
On a eu un problème pareil chez nous mais pas encore résolu
A priori, c'est un problème de libération de ressources. On fait souvent l'erreur de croire que VB fait très bien ça tout seul, et c'est vrai pour des petits trucs, mais quand on se ballade avec un EXE qui pèse quelques MB, on ne peut malheureusement pas se permettre de laisser faire VB. Faut tout détruire à la main.
Marsh Posté le 06-05-2003 à 11:52:51
172Kb
aucune classe
juste un appel a l'api sleep
maus des ouvertures ole vers word, excel, powerpoint et acrobat reader que je ferme normalement à la fin
Marsh Posté le 06-05-2003 à 13:20:11
oulah les ole on a ça aussi mais word seulement. Mmmmh
Dans notre cas on a même fait un test style msgbox gnagnagna juste avant et après un End, pour voir. Celui avant s'affiche mais pas celui d'après donc le programme est bien terminé mais il reste quand même en mémoire
Marsh Posté le 06-05-2003 à 13:40:39
je viens de remarquer un truc marrant :
pour fermer l'appli on a deux choix :
1) -soit par le bouton exit dont le code est : 'end'
2) -soit par la petit croix se qui va lancer l'event 'terminate' dans lequel le code est 'end' (ce qui ne sert à rien mais bon ça y était avant...et noton que si j'enleve ce 'end', le resultat est pareil...)
dans le cas 1), le process disparait bien
dans le cas 2), le process reste !!!!. c marrant car en fait dans les deux cas, la meme instruction est lancée....
Marsh Posté le 06-05-2003 à 13:43:36
Pas exactement, le bouton Exit est à toi. La croix est une option système. La différence est minime mais subtile assez pour laisser un doute dans mon esprit.
Reste que le résultat devrait être le même puisqu'on a un End aux deux endroits. Je suis pas sûr de pouvoir aider là
Marsh Posté le 06-05-2003 à 13:56:41
j'ai trouvé !!!!
dans mon bouton exit, le code 'end' permet de fermer toutes les instances et le toutim, puis fermeture de l'appli.
dans terminate, le code 'end' arrive trop tard, l'appli est déja 'fermé' donc on ne peut plus fermer toutes les instances. Il suffit de placer ce code 'end' dans l'event un_load qui est lancé par la petit croix et qui va lancer par la suite l'event terminate. Comme ça, 'end' fait son travail de fermeture avant que l'appli soit 'fermé'
je sais pas si l'explication est correcte, mais ça marche comme ça, et c'est comme ça que je me le suis expliqué
Ci de ton aide drasche
Marsh Posté le 06-05-2003 à 14:05:37
En tout cas il y a sûrement un changement significatif à déplacer End dans Unload plutôt que Terminate en effet Il faut savoir que le Unload est le dernier endroit où les objets graphiques sont disponibles; ils ne le sont plus dans Terminate.
A méditer
Marsh Posté le 06-05-2003 à 11:00:50
salut !
j'ai une petit appli en vba.
sur plusieurs ordi sous win nt, je lance l'appli, le process nom.exe correspondant apparait dans les taches en courant (cf.gestionnaire des taches), je lance divers traitements puis je ferme l'appli et le process disparait naturellement.
Sous un autre ordi sous win2000, meme manip, mais quand je ferme, le process reste !!!!
Pkoi ?
pour fermer, je clike sur la croix. ca lance l'event 'terminate' où il ya aucun code et hop c fini...
pour être sur, j'ai meme ajouté un 'end' dans l'event 'terminate', mais ca n'a rien changé. sous l'ordi win2000, un process reste toujours
pkoi ????
vous auriez pas une idée ?
ci d'av'
---------------
Il suffit de me dire de me taire...