IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#] Comment savoir si un process externe est planté ?


Sujet :

C#

  1. #1
    Membre régulier Avatar de Piet
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 111
    Points : 108
    Points
    108
    Par défaut [C#] Comment savoir si un process externe est planté ?
    Bonjour,

    J'aimerais, à des fins de surveillance des applications réseau, être prévenu lorsqu'une application capitale (et développée en externe) plante.

    Je n'ai pas la main sur cette application (je ne peux pas toucher au code).

    Y a-t-il un moyen de savoir qu'une application externe ne répond plus ou qu'elle a levé une exception?

    Avez-vous des pistes vers lesquelles je pourrais me diriger ?

    Merci d'avance pour les réponses que vous pourrez m'apporter.
    Piet

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    une solution serait de lister les processus et de tester si il fonctionne correctement

    Quand tu utilises le gestionnaire de tache, celui ci est capable de te dire si l'application "répond" ou pas. Partant de cette information que windows est capable de te fournir, je pense que tu dois pouvoir en cherchant un peu sur le net, trouver une API Windows (win32) qui te fournit une telle information.

    Après, reste à te définir la liste des processus critiques à surveiller et le tour sera "joué"... (je crois, de mémoire qu'une telle question ou assez proche a déja été posé sur les forums de developpez.com... peut-etre regarder dans la rubrique C# ou dans les autres rubriques (ce qui fonctionne en C++ fonctionne aussi en C# (moyennant un peu de travail parfois)

    The Monz, Toulouse
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  3. #3
    Membre régulier Avatar de Onlava
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 92
    Points : 112
    Points
    112
    Par défaut
    Salut,

    theMonz31, pas sur que cette méthode fonctionne dans le cas ou l'application en question ne possède pas de fenêtre à proprement dit.

    Piet, as-tu la possibilité de lancer ces process via du code c# ?
    XOR Onlava, Onlava

  4. #4
    Membre régulier Avatar de Piet
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 111
    Points : 108
    Points
    108
    Par défaut
    Moui, ok, pour le "ne répond pas", on peut le détecter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procs = Process.GetProcessesByName("MyApplication");
     
    if (procs[0].Responding )	
      MessageBox.Show("MyApplication répond");
    else
      MessageBox.Show("MyApplication ne répond pas");
    Mais dans ce cas, une application qui a levé une exception est-elle toujours dans le cas d'une application qui ne répond pas?

    En fait, il faudrait presque que je lance le process pour le surveiller... ce qui est plus ennuyeux.
    Piet

  5. #5
    Membre régulier Avatar de Onlava
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 92
    Points : 112
    Points
    112
    Par défaut
    Rgarde du coté de Process.Exited et Process.ExitCode.

    Un programme digne de ce nom devrait retourner un exitCode différent de zéro dans le cas d'une erreur.
    XOR Onlava, Onlava

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    Pourquoi genant le fait que tu "lances le processus" ?

    Tu pourrais avoir un tableau de bord qui s'occupe de cela ?

    Maintenant, le Responding de la class Process va "juste" voir si l'IHM répond.
    En dehors de cela, evidemment, si l'application n'as pas d'IHM, cela risque d'etre plus compliqué

    Maintenant, je pense que tu as les deux Solutions (process ou lancement par toi) qui peuvent t'aider

    après, il existe peut-etre des solutions plus complexes comme le fait de peut-etre travailler au niveau du noyau, etc... Tu pourrais aussi (c'est juste une idée) surveiller la "consommation" de CPU d'un process (c'est un peu risqué), mais bon... si tu vois qu'un process te bouffe tout ton CPU pendant un temps assez long (genre que entre 2 mesures du temps du process, il se passe plus d'une minute (ce qui veut dire que ton process de mesure n'a pas souvent la main pour faire son boulot)), tu pourrais en déduire que le propose fait des choses pas "catholiques"... mais ca reste une hypothèse bien sur...

    The Monz, Toulouse
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  7. #7
    Membre régulier Avatar de Piet
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 111
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par Onlava Voir le message
    Salut,

    theMonz31, pas sur que cette méthode fonctionne dans le cas ou l'application en question ne possède pas de fenêtre à proprement dit.
    Bah, si, ce n'est pas une mauvaise idée, mais je me pose des questions quant aux exceptions. Si à un moment, l'exception du programme n'est pas gérée, on aura un message du type "une exception non gérée......".

    Quel est l'état de réponse du processus à ce moment ? Toujours "not responding" ?

    Citation Envoyé par Onlava Voir le message
    Piet, as-tu la possibilité de lancer ces process via du code c# ?
    J'ai la possibilité de lancer certains de ces process, mais pas toujours (process en cascade).

    Puis à ce moment, c'est mon application qui ne devra comporter aucun bug dans son exécution normale.

    Je souhaiterais juste faire de la surveillance, pas d'action sur les process (du moins dans un premier temps).


    Merci pour votre aide en tout cas.
    Piet

  8. #8
    Membre régulier Avatar de Piet
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 111
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par theMonz31 Voir le message
    salut
    Pourquoi genant le fait que tu "lances le processus" ?
    Voir mon dernier message

    Citation Envoyé par theMonz31 Voir le message
    Maintenant, le Responding de la class Process va "juste" voir si l'IHM répond.
    En dehors de cela, evidemment, si l'application n'as pas d'IHM, cela risque d'etre plus compliqué
    IHM = ?
    Citation Envoyé par theMonz31 Voir le message
    Maintenant, je pense que tu as les deux Solutions (process ou lancement par toi) qui peuvent t'aider
    Oui, je pense que je vais creuser dans cette direction.

    Citation Envoyé par theMonz31 Voir le message
    après, il existe peut-etre des solutions plus complexes comme le fait de peut-etre travailler au niveau du noyau, etc... Tu pourrais aussi (c'est juste une idée) surveiller la "consommation" de CPU d'un process (c'est un peu risqué), mais bon... si tu vois qu'un process te bouffe tout ton CPU pendant un temps assez long (genre que entre 2 mesures du temps du process, il se passe plus d'une minute (ce qui veut dire que ton process de mesure n'a pas souvent la main pour faire son boulot)), tu pourrais en déduire que le propose fait des choses pas "catholiques"... mais ca reste une hypothèse bien sur...
    Oui, mais ces applications fonctionnent comme des services et ne s'activent que lors de certains événements => il n'y a pas toujours de process changeant. Dans ce cas, la solution éviterait juste l'overload du serveur.
    Piet

  9. #9
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    si ton process a balancé une exception , il y a des chances qu'il soit toujours responding à true

    EN tout cas, je viens de faire l'essai avec un process faisant une division par 0... je le surveille et le responding est toujours à true bien que la fenetre d'exception de l'application ayant planté soit affichée et me demande quoi faire !!!

    Donc, potentiellement, un cas particulier à gérer...

    The Monz, Toulouse
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  10. #10
    Membre régulier Avatar de Piet
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 111
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par Onlava Voir le message
    Rgarde du coté de Process.Exited et Process.ExitCode.

    Un programme digne de ce nom devrait retourner un exitCode différent de zéro dans le cas d'une erreur.
    Ok, mais dans ce cas, il faut que je lance le process moi-même. Et je ne suis pas certain que ces programmes donnent un code de sortie...

    Un programme qui ne gère pas les Exceptions est-il un programme digne de ce nom ?
    Piet

  11. #11
    Membre régulier Avatar de Piet
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 111
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par theMonz31 Voir le message
    ... responding est toujours à true bien que la fenetre d'exception de l'application ayant planté soit affichée ...
    Vous avez ciblé mon problème.


    Y a-t-il une autre méthode que de vérifier si le handle des fenêtres ne contient pas le titre "Exception..." dans ce cas?

    Qu'en pensez-vous ?
    Piet

  12. #12
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    non, je ne crois pas

    Par contre, quand tu regardes les propriétés des threads de l'application, tu peux parfois être dans l'état "UserRequest"... je ne sais pas comment cela peut-etre exploitable, mais bon.. ça pourrait être une piste

    Je crois qu'il faudrait (mais tu as déjà du le faire), lister l'ensemble des scénarii possibles et voir ensuite, qu'elle réponse tu peux apporter à chacun des ces scénarii ... pour cibler la meilleure stratégie à utiliser

    The Monz, Toulouse
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  13. #13
    Membre régulier Avatar de Piet
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 111
    Points : 108
    Points
    108
    Par défaut
    J'en suis en effet à ce stade.

    Bon, bon, je vais creuser les différentes pistes et voir ce que je peux en retirer et comment je vais pouvoir l'exploiter au mieux.

    Merci pour votre aide en tout cas.
    Piet

Discussions similaires

  1. Comment savoir si un process est en cours d'execution
    Par luroten dans le forum Windows
    Réponses: 2
    Dernier message: 08/10/2014, 15h11
  2. Réponses: 3
    Dernier message: 29/08/2012, 11h02
  3. Comment savoir si une impression s'est bien déroulé?
    Par Cyrilh7 dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/11/2003, 20h49
  4. [VB6] comment savoir si la commande shell est terminée ?
    Par ghyscharlotte dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 30/07/2003, 19h12
  5. Réponses: 4
    Dernier message: 10/09/2002, 17h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo