Précédent   Forum des professionnels en informatique > Java > Général Java > Langage
Langage Forum d'entraide sur le langage Java et autres langages pour la JVM : syntaxe, POO, conventions, API standard. Avant de poster -> FAQ Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/11/2007, 11h22   #1
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 83
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 83
Points : 25
Points : 25
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
edenyorke est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2007, 11h51   #2
Rédacteur/Modérateur
 
Avatar de CyberChouan
 
Homme Benoît Courtine
Directeur technique
Inscription : janvier 2007
Messages : 2 744
Détails du profil
Informations personnelles :
Nom : Homme Benoît Courtine
Âge : 29
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Directeur technique
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2007
Messages : 2 744
Points : 4 200
Points : 4 200
Envoyer un message via MSN à CyberChouan
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
CyberChouan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2007, 12h55   #3
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 83
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 83
Points : 25
Points : 25
Il doit bien exister une solution purement java je pense, enfin j'espere !
edenyorke est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2007, 13h15   #4
Rédacteur/Modérateur
 
Avatar de CyberChouan
 
Homme Benoît Courtine
Directeur technique
Inscription : janvier 2007
Messages : 2 744
Détails du profil
Informations personnelles :
Nom : Homme Benoît Courtine
Âge : 29
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Directeur technique
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2007
Messages : 2 744
Points : 4 200
Points : 4 200
Envoyer un message via MSN à CyberChouan
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
CyberChouan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2007, 14h50   #5
Membre confirmé
 
Développeur informatique
Inscription : avril 2003
Messages : 312
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : avril 2003
Messages : 312
Points : 290
Points : 290
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
leyee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2007, 16h24   #6
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 83
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 83
Points : 25
Points : 25
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.
edenyorke est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2007, 18h07   #7
Membre Expert
 
Inscription : octobre 2005
Messages : 1 403
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : octobre 2005
Messages : 1 403
Points : 1 600
Points : 1 600
Envoyer un message via MSN à iohack
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...
iohack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2007, 09h18   #8
Membre confirmé
 
Inscription : septembre 2007
Messages : 282
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 282
Points : 282
Points : 282
peut-être a-t-il trouvé des informations sur les shutdown Hook
Napalm51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2007, 09h36   #9
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 83
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 83
Points : 25
Points : 25
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 :
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...
edenyorke est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2007, 10h04   #10
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 83
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 83
Points : 25
Points : 25
Voici le code complet et qui fonctionne parfaitement lors de l'arrêt de windows

Code :
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)
edenyorke est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2008, 17h07   #11
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 83
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 83
Points : 25
Points : 25
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
edenyorke est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 12h57   #12
Membre du Club
 
Inscription : juin 2007
Messages : 44
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 44
Points : 45
Points : 45
Voici une sorte de FAQ sur le sujet proposée par Sun
http://java.sun.com/j2se/1.4.2/docs/...ok-design.html
domdidom.eu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 15h03   #13
Membre Expert
 
Inscription : mai 2004
Messages : 1 253
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 1 253
Points : 1 290
Points : 1 290
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 ?
dingoth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 20h54   #14
Membre habitué
 
Avatar de Celeborn
 
Inscription : 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
Points : 148
Points : 148
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 ?
Celeborn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 09h27   #15
Membre Expert
 
Inscription : mai 2004
Messages : 1 253
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 1 253
Points : 1 290
Points : 1 290
... à l'extension du système ? Ca veut dire quoi, ça ? oO
dingoth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 17h10   #16
Membre habitué
 
Avatar de Celeborn
 
Inscription : 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
Points : 148
Points : 148
Au temps pour moi , c'était "EXTINCTION" que je voulais dire, sinon effectivement ça veut rien dire !
Celeborn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 17h22   #17
Responsable IRC
 
Avatar de mavina
 
Homme Frédéric Mora
Développeur Java
Inscription : octobre 2004
Messages : 1 815
Détails du profil
Informations personnelles :
Nom : Homme Frédéric Mora
Âge : 27
Localisation : Chine

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

Informations forums :
Inscription : octobre 2004
Messages : 1 815
Points : 2 385
Points : 2 385
Envoyer un message via MSN à mavina Envoyer un message via Skype™ à mavina
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.
__________________
Développeur Java / Flex à Shanghai, Chine
mes publications
Mon dernier tutoriel : Messages Quit IRC : explications

La rubrique IRC recrute des redacteurs : contactez moi

Ce flim n'est pas un flim sur le cyclimse. Merci de votre compréhension.[/SIZE]
mavina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 19h40   #18
Invité de passage
 
Inscription : décembre 2010
Messages : 4
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 4
Points : 3
Points : 3
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"
zippedfire est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 11h12   #19
Membre Expert
 
Avatar de Deadpool
 
Homme
Inscription : novembre 2005
Messages : 1 187
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France

Informations forums :
Inscription : novembre 2005
Messages : 1 187
Points : 1 389
Points : 1 389
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.
__________________
We are facing a dangerous period ahead. If we do not stop, correct and change some of these wrongdoings, now, we are all going to suffer. Either things that we make will overtake us, or nature will take over. Earthquake, flood, rain, severe drought, severe winter, lightning destruction, great wind destruction; These things will warn us that we are not following the law of the great spirit.

Extrait du documentaire Broken Rainbow (1985)
Deadpool est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h11.


 
 
 
 
Partenaires

Hébergement Web