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

Java Discussion :

Process perdu dans la nature


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 Process perdu dans la nature
    Je trouvais qu'il n'y avait pas eu assez de questions sur les Process et sur Runtime.exec() cette semaine, alors j'en rajoute une petite couche

    Bon, sans plaisanter, voici ma problématique: créer une petite application basique de "contrôle parental", dans le but d'autoriser les enfants à jouer seulement pendant une durée déterminée (pour éviter les abus de jeu).

    Voilà le principe:
    - l'exécutable du jeu est crypté
    - l'application java connait le crédit de temps restant pour le jeu.
    - lorsqu'on clique sur le bouton "lancer le jeu" de l'application, elle décrypte l'exécutable, le lance, et commence à compter le temps (en affichant le chronomètre avec le temps restant qui s'écoule)
    - si le temps est faible, une popup d'avertissement est affichée!
    - si on clique sur "arrêter de jouer", si on ferme l'application java, ou si le temps de jeu est écoulé, on ferme le jeu et on recrypte l'exécutable.

    Presque tout fonctionne comme je le veux.

    Je crée correctement le process et je jeu se lance bien. Cependant, juste après ça, le débugger m'indique que le process s'est "détaché" de mon application, et je n'ai plus aucun contrôle dessus:

    - la méthode destroy() ne fait rien
    - la méthode System.exit(0) sur mon application ne marche pas plus.

    Je ne peux continuer d'utiliser mon application java, mais je ne peux l'arrêter QUE lorsque le jeu a été quitté normalement.

    Donc, ma question est:

    - existe-t'il un moyen de garder le contrôle du process du jeu? (et surtout un moyen de l'arrêter depuis mon application java quand je le veux)
    - le cas échéant, existe-t'il une commande windows que je pourrais lancer depuis mon application (un équivalent de "kill -9") pour forcer le jeu à s'arrêter brutalement quand mon chronomètre arrive à 0?

    PS: si cette application intéresse des gens, je pourrais vous donner les sources... quand elle marchera
    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

  2. #2
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    on n'a aucun control lorsqu'on lance une application avec un Runtime.exec().

    2 solutions que je vois :
    - comme tu semble décompiler et recompiler l'executable, tu peux essayer d'inclure un module d'ecoute sur un port x, de cette facon tu pourrais "communiquer" entre le jeu et ton application.
    - voir du coté des commandes windows pour "tuer" le processus, plutot barbare, mais le plus simple.

  3. #3
    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 eclesia
    on n'a aucun control lorsqu'on lance une application avec un Runtime.exec().
    Et existe-t'il un autre moyen de lancer une appli externe en gardant un certain contrôle dessus? Tout ce dont j'ai besoin, c'est de pouvoir tuer son process et la fermer quand je veux.

    Eventuellement, existe-t'il une API dédiée pour ce genre de traitements?

    Citation Envoyé par eclesia
    comme tu semble décompiler et recompiler l'executable
    Non, je ne le compile/décompile pas. C'est beaucoup plus simple que ça: je me contente de rendre le jeu inexécutable en dehors de mon application de contrôle parental, de manière vraiment basique (uniquement pour être sûr de comptabiliser avec mon application le temps passé à y jouer):
    - déplacement du fichier exécutable du jeu
    - changement de son extension
    - cryptage simple du fichier (un simple XOR par exemple)

    Citation Envoyé par eclesia
    voir du coté des commandes windows pour "tuer" le processus, plutot barbare, mais le plus simple.
    Je crois que ça va se finir comme ça... J'aurais aimé quelque chose de plus propre (et de plus "javesque"), mais ça n'a pas l'air évident.
    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

  4. #4
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    si le programme n'est pas fait pour pouvoir communiquer, alors non tu n'auras rien de propre, et comme tu pars sur les jeux windows, tu n'auras rien de tres "javesque" non plus.

  5. #5
    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
    Finalement j'ai réussi à faire ce que je voulais (fermer mon application)... mais pas de manière javesque.

    Pour ceux que ça intéresserait, j'ai utilisé les JSTools, qui fournissent en moins de 1 Mo un bonne quinzaine de petits outils en ligne de commande pour gérer les process sous Windows (lister, mettre en pause, tuer, etc.), que j'ai appelés depuis mon programme.

    Mon problème est donc "résolu": merci eclesia!
    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

  6. #6
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par défaut
    Personnellement ce que j'ai fait pour pouvoir lancer et killer par la suite mes process, c'est que j'ai créé une dll en C, appelée via JNI, permettant de lancer un programme en récupérant le PID. Lorsque je veux fermer le programme, je fais une commande DOS taskkill /PID pid via le Runtime.exec().

    C'est un peu barbare mais ça marche ..

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. code perdu dans la nature
    Par thierry007 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 15/03/2007, 19h00
  2. Perdu dans tous ces framework, mvc, et template
    Par __fabrice dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 02/09/2005, 12h00
  3. [analyse fichier tga]26 octets dans la nature
    Par bakonu dans le forum Général Java
    Réponses: 5
    Dernier message: 08/07/2005, 10h40
  4. Perdu dans le traitement de string
    Par MatMeuh dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/09/2004, 11h34
  5. Perdue dans les Response.Write...
    Par Tapioca dans le forum ASP
    Réponses: 4
    Dernier message: 11/07/2004, 11h54

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