Peut-on accèder en java à la base de registre windows ? Si oui, comment ?
Merci ![/quote]
Peut-on accèder en java à la base de registre windows ? Si oui, comment ?
Merci ![/quote]
http://cogentlogic.com/cocoon/CogentLogicCorporation/JNDI.xml
ça ne répond pas à mon problème .... alors si quelqu'un à une idée sur la question, il est prié de se manifester !
Greg.
Après petite recherche sur le net, j'ai trouvé ça : http://msdn.microsoft.com/visualj/technical/tutorial/wfcregistry/default.asp
C'est gentil tout plein, et ça permet d'accéder à la base de registre windows. Mais n'allez pas croire que je fais les questions et les réponses ! Le fond de ma pensée est le suivant : un applet Java (un .class donc), placé dans une page web et donc executé par un navigateur web, peut-il accéder à la base de registre windows de l'ordinateur sur lequel il s'exécute ? Et si c'est possible, dans quelles conditions ?
Vu que je ne connais pas J++, peut-être quelqu'un pourrait m'éclairer !
Merci.
Greg
J'ai trouvé ça : http://www.trustice.com/java/jnireg/
ça ressemble fort à ce que je cherche, mais (ben oui y a un 'mais'), cette solution utilise un DLL, une librairie externe.
J'en conclut donc qu'il n'est pas possible de modifier la base de registre windows sans passer par une librairie externe, ie en utilisant uniquement les packages d'origine. Alors si je me trompe, faites-le moi savoir !
Je viens d'avoir une idée : en éditant les fichiers user.dat et system.dat, on pourrait changer des infos dans le registre ! Encore faut-il savoir comment sont écris ces fichiers ...
Affaire à suivre ...
Greg
Il est tout à fait logique que tu doives passer par une librairie externe, vu que l'essence même de java est la portabilité. Alors il ne reste qu'à utiliser JINI.
bonne m...
chouba
Il faut utiliser une librairie microsoft. Voici une exemple de code :
Si tu travaille avec visual J++ tu dois avoir le package com.ms.wfc.app.
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 import com.ms.wfc.app.*; .... public void readRegistry(String _key_to_find) { System.out.println("Reading main registry entries: "); RegistryKey theKey = Registry.LOCAL_MACHINE; String[] keyNames = theKey.getSubKeyNames(); int nameCount = theKey.getSubKeyCount(); int i = 0; while (i < nameCount) { System.out.println(keyNames); ++i; } }
Ok pour le bout de code sous J++ ... Mais est-ce je peux en faire une applet ? Si oui, quels navigateurs va pouvoir l'interpréter ? Il faut un interpréteur compatible J++ ...
Je n'ai pas J++, donc je ne peux pas tester ! Mais j'aimerai savoir si cette evéntualité est possible.
Merci.
Greg
C'est possible de faire cela dans une applet avec IE mais pas avec un autre navigateur.
Pour un autre navigateur, y a pas d'autre solution que JNI...
Autre info importante, si tu utilise le JDK1.4, il y a l'API Preferences qui te permet d'accéder à un noeud de la base de registre.
Ah bah oui, la doc de l'API du JDK 1.4 le dit effectivement, on peut parcourir les noeuds de la base de registre ... Mais comment ? Je voudrais bien un exemple, car ça m'intéresse grandement !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 import java.util.prefs.Preferences; public class Test extends Object { public static void main(String[] args) { Preferences lPrf = Preferences.userRoot().node( "Test/My App" ); lPrf.put( "My Key", "My Data" ); System.out.println( lPrf.get( "My Key", "default" ) ); } }
Oh purée ça marche !
Je remarque qd même que c'est dans le dossier JavaSoft. ça ressemble fort aux 2 fonctions Visual Basic qui sont limites à une parite très restreinte de la base de registre.
D'où ma question : peut-on écrire/lire PARTOUT dans la base de registre avec cette méthode ou est-elle limitée ?
En tout cas, merci bcp !
Greg
j'interviens dans le débat, mais y'a une question qui me turlupine :
si on pouvait comme ça grâce à un applet faire ce que l'on veut sur une machine cliente en modifiant sa base de registre (donc de sécurité, proxy, ...)
y'aurait pas un gros gros pb de sécurité ?
Logiquement sur ce que j'ai compris des applets, dès que l'on tripatouille ds ce domaine, faut voir du côté des certificats de sécurités qui doivent être accepté par la machine cliente.
Je t'avoue que sur quoi je travaille actuellement. Je m'efforce de chercher les failles potentielles de Java, et surtout des applets Java. Normalement, les applets java sont exécutées dans une sandbox qui leur interdit certaines opérations comme l'accès à la base de registre, l'accès aux fichiers et l'accès à des serveurs distants. Mais, au fil des versions, ces paramètres de sécurité se sont assouplis (j'ignore pourquoi) et il est possible d'outre-passer les restrictions de la sandbox.
Pour ce faire, le programmeur peut signer un applet très simplement à l'aide d'un certificat (on trouve facilement des explications sur le web). Et une option de IE permet de faire confiance (et donc d'outre-passer la sandbox) à tous les applets java signées. C'est un gros problème de sécurité car ces certificats n'ont aucune valeur : tout le monde peut signer une applet, bonne ou mauvaise !
Je recherche des solutions pour ce genre de problème. Et j'essaie de justifier ces craintes en construisant des exemples concrets.
Si des personnes le désirent, je pourrais communiquer une partie de mes résultats ...
Greg.
Cela risque d'être effectivement très intéressant, j'en frémis déjà d'horreur.
j'ai vu votre truc et c'est super interessant mais du coup comment se positionner dans la base par exemple dans
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run
Merci
A mon avis, ça ne marchera pas depuis une applet. En effet, la méthode userRoot() lève une SecurityException si un gestionaire de sécurité interdit runtimePermission("Preferences"). Ce qui doit être le cas avec une applet.
ced
Oulla, vous resortez mes vieux posts de mes débuts
En tout cas, pour répondre à bibx, il n'est pas possible de parcourir toute la base de registre en Java, et encore moins avec une applet.
Mais, dans certaine condition, c'est possible d'accéder à une partie de la base de registre, même avec une applet ! Pour info, à l'époque j'utilisais le JDK 1.4.0 ...
Greg
Désolé je remonte ce vieux topic mais j'ai pas réussi à fairetourne le code de chawac:
heu çà correspond à quoi?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 import java.util.prefs.Preferences; public class Test extends Object { public static void main(String[] args) { Preferences lPrf = Preferences.userRoot().node( "Test/My App" ); lPrf.put( "My Key", "My Data" ); System.out.println( lPrf.get( "My Key", "default" ) ); } }
Perso je lui avais mis
Code : Sélectionner tout - Visualiser dans une fenêtre à part Test/My App
Il m'a envoyé boulé en me disant "too long" sur la ligne node(...).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Preferences lPrf = Preferences.userRoot().node("HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion..."); lPrf.get( "LaClé", "default" );
Donc je lui ai mis le path de la clé dans le get en rajoutant "/LaClé", et j'ai mis node("") à la place, il me renvoi la chaîne de caractère "default"...
Bon je veux juste récupérer la valeur de la clé moi
Merci!
PS: Le path de ma clé est plus long que çà hein, j'ai juste tronqué pour le topic en ajoutant 3 petits points
Partager