Application qui quitte sans se faire remarquer

Signaler
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour à tous

Dans le cadre d'un projet personnel, j'ai une application avec deux hooks, un clavier et un souris. Tout fonctionne bien et j'arrive à faire ce que je veux (il y a beaucoup de choses dans le code, pas seulement les hooks), le problème c'est que parfois l'application quitte... sans aucune raison. Je m'explique : mon application est une petite fenêtre, du coup c'est pas trop facile de savoir quand elle est là ou quand elle est pas là (d'autant plus quand d'autres logiciels sont en plein écran) et parfois il arrive que l'application disparaisse.

Aucun message d'erreur, aucun "s'est arrêté de fonctionner", rien. Juste l'application qui quitte. J'ai regardé dans le code d'où ça pouvait venir et s'il n'y avait pas un endroit où je faisais quitter l'application qui pourrait être ambigu mais rien du tout.

Auriez vous des idées ?

Merci

11 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Bonjouir,
le sous-classement et le harponnage (hooking) nécessitent une parfaite maîtrise de ce que l'on fait et de ce qui est manipulé (principalement les messages échangés avec le système). Il suffit que l'un de ces messages soit mal interprété, mal modifié ou ignoré à tort pour conduire à des situations malencontreuses.
Tu es seul à savoir ce que tu as pu "harponner", modifier ou ignorer. Et les situations hasardeuses peuvent avoir plusieurs raisons, parmi lesquelles une gestion d'erreur "réparatrice".
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 123 internautes nous ont dit merci ce mois-ci

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
"J'en ai besoin mais je l'ai désactivé pour mes tests"
Tu n'as alors absolument rien résolu !
Et (en plus de ce que t'ai dit dans mon précédent message) :
Quel traitement fait cette fameuse procédure -son code) ?
génère-t-elle la lancée d'un autre processus ?
Un harpon (hook) ne peut par exemple agir sur un code "managé". S'il y est mis, il ne peut continuer son office, chaque évènement d'entrée (donc message) devant nécessairement attendre le raccordement de niveau inférieur.
Si le temps d'attente est trop long, la réactivité du système est considérablement perturbée et Windows intervient alors silencieusement (par suppression du raccordement).


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 123 internautes nous ont dit merci ce mois-ci

Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Bonjour

ni vu ni connu le vrai agent secret
le problème c'est que parfois l'application quitte..
Après avoir quitté si tu ouvres le taskmanager dans les processus est ce que l'application y est ?
Non elle n'y est pas, j'ai une notification dans la barre de notification qui reste, mais quand je passe ma souris dessus elle disparaît (ça m'est déjà arrivé, l'icône s'en va pas toute seule lors de la fermeture des apps, normalement dans mes procédures de fermeture je prends bien soin de faire Notification.Visible = False)
Suite à une visite dans le journal des évènements, j'ai vu que c'était toujours un Sub en particulier qui faisait planter l'application... Je l'ai commenté et depuis aucun bug. Je verrai à l'usage.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Bon ...
Si tu n'as aucun besoin de cette sub (pourquoi alors l'avoir écrite ???) !
J'en ai besoin mais je l'ai désactivé pour mes tests
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Je ne serais pas du tout surpris si le code de la dite procédure renermait (entre autres) une instruction de sortie non "propre" (genre End, Exit, stop, etc ...), alors qu'un objet a été harponné (hooké).
Si justement, pourquoi ? Comment je dois faire pour le un-setter le hook ?
Alors je viens de comprendre le problème que j'ai depuis le début du développement... Le truc c'est comment on fait pour éviter ça ?
En fait, pour être précis, le sub qui apparemment faisait planter le truc, contenait ceci (je croyais l'avoir commentée mais en fait non) :
    Private Sub QuitterToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles QuitterToolStripMenuItem.Click
        Try
            SauverDonnees()
            Notification.Visible = False
            Application.Exit()

        Catch ex As Exception
            Dim Ecrire As StreamWriter = New StreamWriter(Environ("USERPROFILE") & "/Desktop/coucou.txt", True)
            Ecrire.WriteLine(ex.Message)
            Ecrire.Close()
        End Try
    End Sub

Mes questions du coup, sont celles ci :
Je n'ai vu aucun fichier "coucou.txt" sur mon bureau, pourtant l'application a planté. De plus dans le journal des événements je n'ai rien depuis onze heures (soit environ l'heure où j'ai publié ça), que se passe t-il ?
Pourquoi le fait que Windows supprime le raccord font planter l'application ? elle devrait pas juste s'arrêter de compter les clics ? (ça m'est déjà arrivé souvent, c'est l'un des premiers bugs que j'ai rencontrés)
Pourquoi ça ne se passe pas comme ça avec le hook clavier ?
Autre chose : cette application lance aussi une autre application dans quand l'utilisateur clique sur un bouton (programme de configuration) que j'ai désocialisé du projet principal justement pour plus avoir ce problème de hook qui ne marchait plus. Qu'est ce qu'il faut faire pour que le problème ne se pose pas ?
Merci encore pour ton aide
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
"Si justement, pourquoi ? Comment je dois faire pour le un-setter le hook ?"
Je m'en doutais un peu...
Je ne sais pas comment tu l'as installé, ce harpon (je ne connais pas VB.Net et ses "facilités")!
Mais si tu as su l'installer, tu dois savoir comment le désinstaller ! D'autant qu'un harpon doit TOUJOURS être supprimé à un moment où à l'autre (au moins en quittant l'appli !)
Moi, je suis sous VB6 et installe à l'aide de la fonction SetWindowsHookEx et désinstalle à l'aide de la fonction UnhookWindowsHookEx (toutes deux de l'Api de Windows).

Nota : je suis quelque peu effrayé ... Je le suis toujours dans de tels cas (-harponner alors que l'on ne sait pas exactement ce que c'est et qu'on ne sait pas non plus retirer son harpon). Tu te mets en danger si ton code de harponnage n'est finalement qu'un bout de code trouvé quelque-part et utilisé par copier/coller, sans rien réellement maîtriser de la technique de harponnage.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Bah en fait, si j'avoue que je l'ai cherché sur Internet parce que c'est tout sauf évident ce qu'il faut faire (j'ai cherché sur MSDN) mais bizarrement rien n'était indiqué à propos de ça. Je re-regarderai demain, merci encore. Mais pourquoi je me mets en danger exactement ?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Tu te mets en danger en raison des réactions alors imprévisible du système.
Moi, j'ai fini, VB.Net n'étant pas mon langage de développement.
Mon intervention s'est donc limitée à te rappeler certains aspects et conséquences éventuelles du harponnage (quel que soit le langage utilisé pour harponner).