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

Langage Java Discussion :

Intercepter l'arrêt de windows


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 83
    Par défaut Intercepter l'arrêt de windows
    Bonjour,

    J'ai une petite question : Si je veux intercepter l'arret de windows afin d'executer un bout de code java (thread) pour mettre au point une sorte de journal de connexion, vers quelles pistes je dois m'orienter ?

    J'ai vu un exemple en C++ mais en regardant le code, j'ai vu que c'etait pas possible de l'utiliser en JAVA (C++ à plus accès au système)...

    Merci par avance

    Edenyorke

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Citation Envoyé par edenyorke Voir le message
    C++ a plus accès au système...
    Effectivement! C'est pour cela que pour ce genre d'opérations, on passe par du code C++, que l'on invoque dans un programme java via JNI.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 83
    Par défaut
    Il doit bien exister une solution purement java je pense, enfin j'espere !

  4. #4
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Citation Envoyé par edenyorke Voir le message
    Il doit bien exister une solution purement java je pense, enfin j'espere !
    Non: il n'existe pas de solution purement java pour détecter l'arrêt de Windows.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  5. #5
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Par défaut
    Citation Envoyé par edenyorke Voir le message
    Il doit bien exister une solution purement java je pense, enfin j'espere !
    Je ne vois vraiment pas pourquoi. Java est multiplateforme* donc pourquoi fournir des fonctionnalités si specifiques.
    * : j'ai vu beaucoup de personnes cracher sur ce fait mais en programmant intelligemment (et je ne parle pas de petites applications), java est parfaitement portable

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 83
    Par défaut
    L'arrêt d'un systeme d'exploitation est logiquement propre au système d'exploitation, même en codant intelligement ca reste comme même très spécifique.

    j'ai trouvé une solution purement java qui permet de "capter" l'arret de la JVM et d'executer du code avant l'arret de celle-ci et une JVM est bien multi-plateforme.

  7. #7
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Tu peux détailler ta solution, car sous windows, ou même d'autre OS, je doute qu'un shutdown du system puisse être bloqué par du code exécuter avant la terminaison de celle-ci. Cela engendrerait un gros problème de sécurité...
    PS : cela dit, windows étant tellement laxiste - pour ne pas dire totalement ignorant - en terme de sécurité, pourquoi pas...
    [EDIT]
    Je pense à cela en mettant un "while(true);" dans ce fameux code... Ce qui obligerait à débrancher la prise...

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Par défaut
    peut-être a-t-il trouvé des informations sur les shutdown Hook

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 83
    Par défaut
    Voici un detail de la solution ca n'est pas de moi.

    Le but est de detecter les signaux SIGTERM et SIGINT. Si vous executez ce code dans un terminal et si vous le quittez, le message "Shutting down database..." apparaitra. Ca n'est pas parfait puisque ca ne fonctionne pas à l'arret de windows mais c'est deja un début. je cherche des infos sur les signaux envoyés par windows lors de son arrêt.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
     
    import sun.misc.Signal;
    import sun.misc.SignalHandler;
     
    public class SophisticatedShutdownSequence {
      private static boolean running = true;
      public static void init() {
        Runtime.getRuntime().addShutdownHook(new Thread() {
          public void run() {
            System.out.println("reached point of no return ...");
          }
        });
     
        SignalHandler handler = new SignalHandler () {
          public void handle(Signal sig) {
            if (running) {
              running = false;
     
     
              System.out.println("Signal " + sig);
              System.out.println("Shutting down database...");
            } else {
              // only on the second attempt do we exit
              System.out.println(" database shutdown interrupted!");
              System.exit(0);
            }
          }
        };
        Signal.handle(new Signal("INT"), handler);
        Signal.handle(new Signal("TERM"), handler);
      }
     
      public static void main(String args[]) throws Exception {
        init();
        Object o = new Object();
        synchronized (o) {
          o.wait(100000);
        }
        System.exit(0);
      }
    }
    SIGINT c'est le message envoyé lors d'un CTRL-C
    SIGTERM c'est le message envoyé lors d'une fermeture avec la croix

    Il suffit peut être de trouver le bon signal...

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 83
    Par défaut
    Voici le code complet et qui fonctionne parfaitement lors de l'arrêt de windows

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    import java.io.FileWriter;
    import java.io.IOException;
     
    import sun.misc.Signal;
    import sun.misc.SignalHandler;
     
    public class SophisticatedShutdownSequence {
      private static boolean running = true;
      public static void init() {
     
     
        SignalHandler handler = new SignalHandler () {
          public void handle(Signal sig) {
            if (running) {
              running = false;
     
              try {
    			FileWriter fw = new FileWriter("c:\\essai.txt",true);
    			fw.write("Signal : "+sig);
    			fw.close();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
              System.out.println("Signal " + sig);
              System.out.println("Shutting down database...");
              System.exit(0);
            } else {
              // only on the second attempt do we exit
              System.out.println(" database shutdown interrupted!");
              System.exit(0);
            }
          }
        };
        Signal.handle(new Signal("INT"), handler);
        Signal.handle(new Signal("TERM"), handler);
     
     
      }
     
      public static void main(String args[]) throws Exception {
        init();
        Object o = new Object();
        synchronized (o) {
          o.wait(100000);
        }
        System.exit(0);
      }
    }
    Un fichier essai.txt est crée avec la nature du signal capté (pour un arret de windows c'est SIGTERM)

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 83
    Par défaut
    Bonjour,

    Je me permet de reouvrir ce post car je me trouve face à un problème en relation avec la discussion.

    Le code que j'ai trouvé pour intercepter l'arret de windows marche très bien...
    je l'utilise pour envoyer un message de log vers un serveur via WS lorsque l'utilisateur arrête sa machine avec le bouton d'arrêt.
    Le problème c'est que ce code fonctionne uniquement sous IDE

    En effet si j'appui sur le bouton d'arrêt de ma machine et que je suis sous eclipse, il y a bien un message envoyé vers le serveur et l'arrêt de windows se fait correctement.

    A l'inverse si j'utilise Java Web Start et que j'appui sur le bouton d'arrêt, j'ai une belle WebserviceException qui me fait comprendre que le serveur est inaxessible.

    J'aimerai donc savoir si par hasard il existe une solution pour :
    - Soit annuler l'arrêt de windows (pour le faire manuellement par la suite)
    - Soit changer l'ordre d'arret des processus (pour mettre la jvm en dernier)

    Merci par avance

    Edenyorke

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 44
    Par défaut
    Voici une sorte de FAQ sur le sujet proposée par Sun
    http://java.sun.com/j2se/1.4.2/docs/...ok-design.html

  13. #13
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    De plus, une application webstart n'a pas tous les mêmes droits qu'une application stand-alone. Peut-être que la gestion des Hooks en fait partie ?

  14. #14
    Membre éprouvé Avatar de Celeborn
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 133
    Par défaut
    Il est possible dans Windows d'exécuter des scripts au démarrage et à l'extension du système. Est ce que ce genre de chose résoudrait ton problème ?

  15. #15
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    ... à l'extension du système ? Ca veut dire quoi, ça ? oO

  16. #16
    Membre éprouvé Avatar de Celeborn
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 133
    Par défaut
    Au temps pour moi , c'était "EXTINCTION" que je voulais dire, sinon effectivement ça veut rien dire !

  17. #17
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    Citation Envoyé par iohack Voir le message
    Tu peux détailler ta solution, car sous windows, ou même d'autre OS, je doute qu'un shutdown du system puisse être bloqué par du code exécuter avant la terminaison de celle-ci. Cela engendrerait un gros problème de sécurité...
    PS : cela dit, windows étant tellement laxiste - pour ne pas dire totalement ignorant - en terme de sécurité, pourquoi pas...
    [EDIT]
    Je pense à cela en mettant un "while(true);" dans ce fameux code... Ce qui obligerait à débrancher la prise...
    Faudrait arretter de cracher sur windows un peu ^^

    C'est fou qu'on puisse faire ça sous java

    Très intéressant!

    F.

  18. #18
    Membre habitué Avatar de zippedfire
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 11
    Par défaut faut pas rever
    sinon sans faire appel à java si par malheur tu éteins ton windows fait rapidément Windows+R(sur le clavier) et tu tape "shutdown.exe /a"

  19. #19
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Citation Envoyé par mavina Voir le message
    Faudrait arretter de cracher sur windows un peu ^^

    C'est fou qu'on puisse faire ça sous java

    Très intéressant!

    F.
    A noter que ce n'est pas forcément portable à toutes les Jvms vu que des packages sun.misc.* sont utilisés.

    Ces packages ne sont pas nécessairement présents sur d'autres Jvms telles celle d'IBM par exemple.

Discussions similaires

  1. Empêcher l'arrêt de Windows
    Par DeusXL dans le forum Windows XP
    Réponses: 6
    Dernier message: 01/02/2008, 13h57
  2. empêcher l'arrêt de window
    Par philippe13 dans le forum Langage
    Réponses: 6
    Dernier message: 27/06/2007, 18h05
  3. Problème d'arrêt de Windows
    Par Invité dans le forum C++Builder
    Réponses: 8
    Dernier message: 16/11/2006, 16h44
  4. Mon programme empêche l'arrêt de Windows
    Par forzalec dans le forum C++Builder
    Réponses: 4
    Dernier message: 16/11/2006, 14h27
  5. [D6] Comment détecter l'arrêt de Windows
    Par Lucien dans le forum Langage
    Réponses: 6
    Dernier message: 02/03/2006, 10h29

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