# Java und Registry



## fischkrampf (31. Januar 2002)

hi all,

Gibt es eigentlich ne Möglichkeit mit einer Java Applikation auf die Registry zuzugreifen??
So wie bei C++. Damit könnte man ja allerhand lustige Dinge anstellen, wie z.B. die Konfiguration eines Programmes. Ich hasse es nämlich die config in einer txt-Datei unterzubringen.


Vielen Dank für eure Hilfe!!

Gruß fischkrampf


----------



## Robert Martinu (5. Februar 2002)

Auf die Registry zugreifen zu können ginge am Sinn von Java vorbei - die Plattformunabhängigkeit geht verloren.


Wenn Du Dich trotzdem nicht davon abbringen lassen willst, dann ist der Zugriff über eine JNI-Bibliothek möglich.
Zu finden z.B. hier: 
JNIRegistry


----------



## Telebaum der Weise (23. Februar 2002)

Falls man eine Windows-Applikation entwickelt (was man sicherlich auch mit Java darf, sonst kann man ja gleich MS C# verwenden, nur um Plattformspezifizierung zu rechtfertigen), kann ein Eingriff in die Windows-Registry u.U. hilfreich sein.

Du kannst die Windows Registrierung modifizieren, indemm du einen extern abgelegten key per exec()-Aufruf einbindest.

Der Aufruf könnte etwa so ausschaun:
"regedit -r informationen.key"

Der Inhalt der Datei informationen.key wäre zum Beispiel folgender:


```
REGEDIT4
[HKEY_CURRENT_USER\Software\Meinprogramm]
"Letzte Datei"="video.avi"
```

(oder ähnliches)
Eine solche Datei kannst du ja direkt aus Java heraus schreiben.



Quelle: 
http://www.galileocomputing.de/openbook/javainsel/java-08.htm#t39


----------



## TruthsLie (1. März 2002)

hmm also nen Registry-Editor gibbet nicht in java, wegen der schon genannten Plattformunabhängigkeit.


Wenn es allerdings im die Speicherung deiner eigenen Programm-Config geht, so hatte java da wohl sowas wie eine plattformunabhängige Version der Registry zusammengeschustert. Frag mich aber nicht wie sie das genannt haben... ich habe es irgendwo auf java.sun.com gelesen


----------



## MPW (5. September 2004)

Hallöchen,

das mit dem setzen ist ja ziemlich einfach, steht auch in nem Haufen Bücher, aber wie kann man denn auslesen? Ich bin zwar Anfänger, aber ich denke das kann man genauso gut brauchen, ich progr. gerade etwas und brauche zum Beispiel den Pfad der Temporary Internet files des current users. Den Registry Schlüssel kenne ich, kann es auch manuell auslesen, möchte es aber mit Java tun.
Kann mir jemand helfen?


----------



## Thomas Darimont (5. September 2004)

Hallo!

Seit Version 1.4 bietet java das neue Preferences API an. Damit lassen sich betriebssystemunabhänig bestimmte Einstellungen mit Betriebssystemmitteln persistent machen. Unter Windows wird dazu auch die Registry verwendet.

Siehe: http://forum.java.sun.com/thread.jsp?forum=31&thread=518275
http://java.sun.com/j2se/1.4.2/docs/relnotes/features.html#preferences


Gruß tom


----------



## jer1cho (10. August 2007)

Robert Martinu hat gesagt.:


> Auf die Registry zugreifen zu können ginge am Sinn von Java vorbei - die Plattformunabhängigkeit geht verloren.
> 
> 
> Wenn Du Dich trotzdem nicht davon abbringen lassen willst, dann ist der Zugriff über eine JNI-Bibliothek möglich.
> ...


immer wenn ich versuche das zu benutzen bekomme ich:

```
ERROR You have not installed the DLL named 'ICE_JNIRegistry.DLL'.
        no ICE_JNIRegistry in java.library.path
```

was mach ich da falsch?


----------



## zeja (10. August 2007)

Das Programm liefert eine dll mit. Diese packst du innerhalb deines Programms in einen geeigneten Ordner wie z.B. dll.

Bei start deines Programms gibst du dann diesen Ordner mit an:
java -Djava.library.path=dll ...

Dies sagt aus dass dlls im Ordner dll zu finden sind und von dort geladen werden können.


----------



## Anime-Otaku (10. August 2007)

Und ansonsten gibt es noch die Möglichkeit über Properties die Konfiguration in einer Textdatei zu speichern. z.B. 

server.port=5465
server.ip=46.54.65.31


----------



## zeja (10. August 2007)

Anime-Otaku hat gesagt.:


> Und ansonsten gibt es noch die Möglichkeit über Properties die Konfiguration in einer Textdatei zu speichern





fischkrampf hat gesagt.:


> Ich hasse es nämlich die config in einer txt-Datei unterzubringen.



Hmmmmmmmmm


----------



## Anime-Otaku (10. August 2007)

Aber das sagt nichts darüber aus, ob er die Properties Funktionalität kennt, wodurch es ja sehr einfach ist, auf bestimmte Keys einzugehen.


----------



## jer1cho (11. August 2007)

und wie macht man das in applets?


----------



## jer1cho (11. August 2007)

Anime-Otaku hat gesagt.:


> Aber das sagt nichts darüber aus, ob er die Properties Funktionalität kennt, wodurch es ja sehr einfach ist, auf bestimmte Keys einzugehen.


wie funktioniert das mit den properties?

also wenn ich 
das hier angebe:

```
-Djava.library.path=C:\Dokumente und Einstellungen\M\Desktop\bydatum\august\registry-3.1.3\bin\ICE_JNIRegistry.dll
```
 kommt:

```
java.lang.NoClassDefFoundError: und
Exception in thread "main" 
Java Result: 1
```


----------



## jer1cho (13. August 2007)

vieleicht setzte ich auch den  -Djava.library.path  falsch weil ja dann imer dass kommt:


```
java.lang.NoClassDefFoundError: und
Exception in thread "main" 
Java Result: 1
```


----------



## MHayer (16. August 2007)

Hallo,

Es gibt eine Möglichkeit in der Registry Datensätze zu speichern.
Ich habe eine kleine Klasse dazu geschrieben

```
import java.util.prefs.Preferences;
public class Reg 
{//Klasse zum lesen und schreiben in die Registry
	String Item,myName;//Speicherung und Name des Knotens
	static Preferences prefs;
	public Reg(String Node,String Name)//Name des Programms, Name des Kontens, in welchen gespeichert wird 
	{//Regestry wird gelesen
		prefs = Preferences.userRoot().node( !Pfad!+Node);
		myName=Name;
		Item=prefs.get(Name, null);
	}
	public String getItem()
	{
		return Item;
	}
	public void SaveItem(String Item)
	{//Regestry wird gespeichert
		this.Item = Item; 
		prefs.put(myName, Item);
	}
}
```
Du musst nur den Pfad einsetzen.

Diese Weise ist Platformunabhängig.

Bei Windows wird es in der Registry unter HKEY_Current_USER\Software\JavaSoft\... angelegt
Bei Linux z.B. legt Java eine XML Datei an.


----------



## Tagamoga (14. April 2009)

Hallo verzeiht, wenn ich das nach oben bringe, aber wie löscht man einen knoten komplett aus der Registry?

Grüße, Taggi


----------



## MHayer (14. April 2009)

Hallo Tagamoga,
Ich habe mein Beispiel von unten verfeinert:

```
public void SaveItem(String Item)
	{//Regestry wird gespeichert
		try
		{
			if(Item==null)
				prefs.clear();
			else
				prefs.put(myName, Item);
		} catch(Exception e)
		{
			Helper.ErrorLog("Error on Set Regestry ==> "+e);
		}
	}
```
kannst du den angewählten Wert löschen, wenn der zu speichernde Wert null ist.
Ich denke nicht dass es so einfach möglich ist Pfade
innerhalb der "Registy" zu löschen.

Du musst bedenken, dass bei anderen Betriebssystemen (z. B.UNIX) die JRE
die Speicherung Übernimmt,
nur bei Windows gibt es halt so etwas wie die Registry

und tschüss
MHayer


----------



## Tagamoga (15. April 2009)

Ah...

Danke schön, das hilft mir schon sehr weiter! 

Grüße, Taggi


----------



## Tikonteroga (3. Oktober 2010)

Hallo,

ich muss in einer JAVA Anwendung den Namen der Person (User) und den Namen von dem Unternehmen auslesen, für das das Betriebssystem lizensiert ist.

Kann ich das auch über die Preferences API auslesen ?

Gruß Tikonteroga


----------



## MHayer (4. Oktober 2010)

Hallo Tikonteroga,

meines Wissens nach nicht.
Diese Funktionalität nur zur Speicherung von Daten gedacht ist, da hier beim Benutzer gespeichert wird.
Es ist auch für Linux und MAC gedacht, dort gibt es keine zentrale Datei wie bei Windows.
Dort wird die Infomation in der JRE Zwischengespeichert.

Aber hier kann dir vielleicht geholfen werden:
http://www.tutorials.de/java/226380-benutzername-auslesen.html


----------



## Thomas Darimont (4. Oktober 2010)

Hallo,

schau mal hier:
http://www.tutorials.de/java/286654-windows-registry-mittels-jniregistry-auslesen.html
http://www.tutorials.de/java/195301...-funktionen-aus-beliebigen-dlls-aufrufen.html

... ansonsten kannst du dir auch mit JNA https://jna.dev.java.net/ die Advapi32.dll wrappen und dann
über RegQueryValueEx(...) den Registry Werz auslesen.

Dazu kannst du den Code aus dem hudson.util.jna Package aus Beispiel nehmen (oder gleich den 
Code verwenden).
Siehe: http://hudson-ci.org/ -> hudson.war WEB-INF/lib -> hudson-core-XXXX.jar
(Braucht jedoch weitere Abhängigkeiten)

Einfachere Möglichkeit 
Hudson Source ziehen: https://hudson.dev.java.net/servlets/ProjectDocumentList?folderID=6553&expandFolder=6553&folderID=0
und dort das Package hudson.util.jna als Java Sourcen exportieren und die nicht notwendigen Abhängikeiten
entfernen.

Dann kannst du Registry Werte ganz einfach abfragen:

```
package de.tutorials;

import hudson.util.jna.RegistryKey;

public class RegistryTest {
  public static void main(String[] args) {
    String subKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion";
    RegistryKey regKey = RegistryKey.LOCAL_MACHINE.openReadonly(subKey);

    String value = regKey.getStringValue("DevicePath");
    System.out.println(value);

    regKey.dispose();
  }
}
```

Gruß Tom


----------

