You are not logged in.
Bonjour All,
J'aimerais lancer gedit ou notepad.exe a partir de IE ou FF.
Le code source JAVA (Exec.java) pour faire cette opération est:
import java.applet.* ; import java.awt.* ; import java.io.*; public class Exec { public static void main(String[] args) { String cmd; cmd = "/usr/bin/gedit"; //cmd= "c:\windows\notepad.exe"; try { Runtime r = Runtime.getRuntime(); Process p = r.exec(cmd); p.waitFor(); } catch(Exception e) { System.out.println("erreur d'execution " + cmd + e.toString()); } } }
Une fois la class (Exec.class) faite, je lance mon programme localement (via ligne de commande: java Exec) ceci lance effectivement notepad.exe ou gedit
Ma question est comment faire pour lancer notepad.exe a partir d'IE/FF en utilisant la class Exec.class?
J'ai deja essayé avec
<HTML> <HEAD> <TITLE> gedit </TITLE> </HEAD> <BODY> Lancement de gedit : <applet code="Exec.class" WIDTH=150 HEIGHT=150> </APPLET> </BODY> </HTML>
Mais aucun succés quand j'essaye dans le browser de lancé cette page html, la console java me donne comme log:
basic: New window ID: 0 basic: Arrêt de l'applet... basic: Récepteur de progression supprimé : sun.plugin.util.GrayBoxPainter@33788d basic: Recherche d'informations... basic: Libération du chargeur de classes : sun.plugin.ClassLoaderInfo@1961581, refcount=0 basic: Mise en cache du chargeur de classes : sun.plugin.ClassLoaderInfo@1961581 basic: Taille de cache du chargeur de classes courant : 1 basic: Terminé... basic: Jonction du thread d'applet... basic: Destruction de l'applet... basic: Elimination de l'applet... basic: Sortie de l'applet... basic: Thread d'applet joint... basic: New window ID: 2c1735b basic: Value of xembed: 1 basic: setWindow: call before applet exists:2c1735b basic: Référence au chargeur de classes : sun.plugin.ClassLoaderInfo@1961581, refcount=1 basic: Récepteur de progression ajouté : sun.plugin.util.GrayBoxPainter@e33e18 basic: Chargement de l'applet... basic: Initialisation de l'applet... basic: Démarrage de l'applet... java.lang.ClassCastException: Exec at sun.applet.AppletPanel.createApplet(Unknown Source) at sun.plugin.AppletViewer.createApplet(Unknown Source) at sun.applet.AppletPanel.runLoader(Unknown Source) at sun.applet.AppletPanel.run(Unknown Source) at java.lang.Thread.run(Unknown Source) basic: Exception : java.lang.ClassCastException: Exec
Une idée?
Offline
Salut,
Peut-être un problême de sécurité. Un applet java ne peut pas faire n'importe quoi, seules certaines classes sont autorisées dans un applet : "Pour les applets, la JVM vérifie toutes les instructions du code avant exécution, et bloque l'exécution du programme si une instruction n'est pas autorisée. Les seules instructions autorisées sont celles qui ne peuvent pas poser de risque d'intrusion. Par exemple, une applet n'a pas le droit d'écrire un fichier sur le disque. Les restrictions sont beaucoup plus strictes que pour d'autres langages du même type conçus par certains éditeurs laxistes. Il existe bien sûr la possibilité qu'une applet Java abuse d'un bug d'une JVM particulière pour exécuter des instructions non autorisées, mais en pratique les failles de sécurité se trouvent beaucoup plus souvent dans d'autres programmes (comme Microsoft Internet Explorer, Outlook ou Office) que dans les JVM. Et bien sûr, si on utilise Java 1.1, on peut être tranquille que les dernières failles de sécurité ont été éliminées il y a des années." d'aprés : http://media4.obspm.fr/outils/simulab/intro_Java.html
Est-ce que tu connais : http://java.sun.com/j2se/1.4.2/docs/api/ ?
A+.
Offline
Resalut,
J'ai vu une possibilité intéressante sur ce site : http://www.progx.org/index.php?section= … 2#_topic_2.
Petit problème, il faut installer JEXT (http://www.jext.org/index.html?section=about) . JEXT va fonctionner comme un serveur qui écoute sur le port 18141. Les informations sont transmisent via ce script javascript:
function notifyJext(cod, syntax) { cod = "http://" + "../xml/progx-org/articles/".substring(2) + cod; jextWindow = window.open('http://localhost:18241/?cod=' + cod + '&syntax=' + syntax, '', 'scrollbars=no,resizable=no,width=320,height=50'); window.setTimeout("jextWindow.close()", 1500); }
Hope it helps.
A+.
Offline
Si les antivirus arrivent a lire ton HDD via JAVA c'est qu'il y a bien une possibilité? C'est cette possibilité que je cherche, le comment faire afin que mon applet soit lancée par mon browser, sachant que je sais comment signé l'applet et sa se limite la
exemple du scan HDD via JAVA, sa marche sous linux/windows (tu peux voir ton HDD defilé devant toi ):
http://fr.trendmicro-europe.com/consume … +my+PC+now
Offline
Salut,
Je supposes que tu ne distribue pas un certificat qui donne une politique de droit suffisante à ta JVM.
Je prétends ceci à cause de la ClassCastException récupéré dans la console.
A+.
Offline
Hello,
Non, le ClassCastException est vraisemblablement causé par le fait que ta classe Exec ne dérive pas de la classe Applet. Et pour une applet, la méthode main() n'est pas appelée automatiquement, en revanche le constructeur sans arguments puis la méthode start() de l'applet sont invoquées. Pour que du code marche a la fois en applet et en standalone, il faut bricoler un peu (d'ou la raison d'être de l'appletviewer du jdk).
Maintenant, même si tu convertis ce code en applet, ca déclenchera une violation de sécurité. Pour ouvrir la permission il te faut créer un policy file (http://java.sun.com/j2se/1.4.2/docs/gui … Files.html), l'inclure dans un .jar, signer ce .jar et accepter les avertissements liés a l'authenticité de la signature.
Détails mis a part, pourquoi voudrais-tu lancer un exec depuis un browser ? si la sécurité java est comme elle est c'est pour de nombreuses raisons fort pertinentes, la solution que tu décris présente de nombreux dangers. Il y a certainement une manière différente d'arriver au résultat que tu souhaites obtenir...
++
BOFH
Offline
Salut,
Merci pour l'explication cohérente de l'erreur.
A+
Offline
Le but est de pouvoir lancer un .exe a partir du browser en utilisant JAVA, certe c'est un risque au niveau de sécurité mais bon .
Je vais voir le lien concernant la securité JVM afin de pouvoir crée le .jar
Offline
Mais qui voudrait lancer un exe sur la machine locale a partir d'un browser ? un utilisateur clique sur un lien et du code s'exécute sur la machine ? dangereux, dangereux...
Si c'est pour lancer par un utilisateur final, pourquoi spécialement par java ? si c'est pour automatiser, tu peux peut-être essayer d'utiliser la RMI java, ou même inetd...
Offline
Parcequ'il y'aura encore une autre partie pour une gestion du .exe via le web. Pourquoi Java? c'est le seul a pouvoir faire ceci en sachant qu'il y aucun soucis avec IE et FF.
Offline
Si c'est juste pour exécuter du code sur une machine cliente, sans intervention directe de l'utilisateur, jette sérieusement un coup d'oeil sur la RMI java. Avec un appel de méthode sur un objet distant, tu peux éxecuter du code arbitraire, son téléchargement est automatisé et la sécurité java est toujours active.
Sinon, considère d'écrire l'application elle-même en Java si c'est possible, ça aura l'avantage d'être cross-platform, et les performances comme le langage ont fait plusieurs progrès depuis Java 1.
Si c'est pour une application black-hat, Java n'est certainement pas la meilleure technologie. Les avertissements concertant les violations de sécurité sont bcp plus chiantes que ceux d'un certificat ssl non valide, par exemple.
Offline
En parlant d'une machine cliente tu parles d'une machine sur le réseau? Car ce que je sais sur le RMI c'est qu'il faut un serveur et un client. Tantdit que moi je parle de l'execution du code sur une machine locale (tu visites la page html et elle te lance l'application gedit "par exemple" qui est dans ta machine).
Offline
Le RMI marche aussi en local, bien sur; tu peux avoir un programme serveur et un programme client sur la même machine. Mais, si c'est pas pour faire du réseau, quel intérêt de lancer un exe depuis un browser ? tu veux faire une interface de navigation de bureau cross-platform ?
Offline
Hello,
un site sur java: http://perso.wanadoo.fr/jm.doudoux/.
Au fait, vous connaissez java web start : http://perso.wanadoo.fr/jm.doudoux/java … hap029.htm.
Bonne fin de journée.
Offline