# Registry-Zugriff auch einfacher? (ORACLE_HOME auslesen)



## kasi1983 (31. Jul 2006)

Hallo zusammen,

Ich bin mir nicht sicher, ob ich nun richtig gepostet habe - mein Problem hat zum einen mit der Windows-Registry zu tun, und zum anderen mit der Oracle Datenbank...  ???:L 

Jedenfalls bin ich dabei, in Java eine Art Setup für ein komplexes Oracle-Index-Framework zu erstellen. Ich muss dabei u.a. eine Datei im Verzeichnis $ORACLE_HOME\NETWORK\ADMIN verändern.

Dazu müsste ich die ORACLE_HOME-Variable auslesen. Wie ich feststellen musste, ist das nicht so einfach, wie bei Windows-Umgebungsvariablen (z.B. %PROGRAMFILES% etc.). 
Scheinbar lässt sie sich nur aus der Registry fischen, sie steht bei mir in HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1

Wobei ich persönlich die schreckliche Gewissheit habe, dass "KEY_OraDb10g_home1" wohl nicht auf jedem System so heißen wird...   :noe:  was die Sache nur noch weiter verkompliziert. Aber das ist im Moment das kleine Problem.

Meine Fragen lauten jetzt: 

1)  Kann man die ORACLE_HOME evtl. noch woanders auslesen?

2) Falls nein - gibt es eine Möglichkeit, dieses einen Registry-Eintrag auszulesen, ohne dass ich diesen riesen Overkill mit den DLLs (z.B. in jRegistryKey, aber auch den meisten anderen Paketen, mit denen man auf die Registry zugreifen kann) betreiben muss? Ich will doch nur diesen einen dummen Pfad haben!

Mit verzweifelten Grüßen
Kerstin


----------



## kasi1983 (31. Jul 2006)

Also, ich habe jetzt noch weiter experimentiert.

Bei meiner Lösung habe ich nun die Registry ganz außen vor lassen können. Ich poste sie hier jetzt nur der Vollständigkeit halber - mir ist bewusst, dass es wohl keinen interessieren wird (und dass es eher Offtopic ist), aber evtl. hat ja doch irgendwann noch jemand dasselbe Problem.

Man kann in SQLPlus folgenden Befehl benutzen: @.[%ORACLE_HOME%]

Er ist nicht dazu gedacht, den Wert der Variable zurückzugeben, deshalb gibt er folgende Fehlermeldung aus

SP2-0310: unable to open file ".[C:\oracle\product\10.1.0\Db_1].sql"  

und enthält damit den Oracle-Home-Pfad. Den Befehl also flugs in eine SQL-Datei gespeichert:


```
@.[%ORACLE_HOME%];
quit;
```


Und jetzt kommt mein Java-Code.



```
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class ReadOracleHome {

	public static void main(String[] args) {

		String cmdReturn = "", file = "";

		try {
		        Process p = Runtime.getRuntime().exec(
			"cmd /c sqlplus user/passwort@dbname @readoraclehome.sql");

		        BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));

			while ((cmdReturn = in.readLine()) != null) {
			    file += cmdReturn;
			}

			int start = file.indexOf("[");
			int end = file.indexOf("].sql");

			String path = file.substring(start + 1, end);

			System.out.println(path);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
```

Wahrscheinlich wird sich ein gute Programmierer bei diesem Code erst mal an den Kopf fassen und mich für blöd halten. Ist mir aber egal ;-)
Und - Ja, ich weiß, dass man nicht "catch (Exception..." machen soll. Es ist doch bloß zum Testen. 

Kerstin


----------



## thE_29 (1. Aug 2006)

Um Registry Einträge auszulesen kann man regedit /e und dann hinten den Schlüssel Namen angeben!

Einspielen mit /s und reg Datei!

Maybe brauchst du es vielleicht doch mal!


----------



## kasi1983 (1. Aug 2006)

Hallo,

das Einspielen habe ich schon mal benutzt - das funktioniert prima.
Habe jetzt auch mal regedit /e getestet, aber so wie ich das bisher mitbekommen habe, kann man damit nur einen ganzen Schlüssel (also quasi diese Ordner - ich weiß immer die genauen Bezeichnungen nicht ;-) ) exportieren - einen einzelnen Eintrag (Zeichenfolge, Binärwert, DWORD....)  scheinbar nicht. 
Na ja, man könnt's aus der erstellten Datei irgendwie rausfiltern...

Danke für diese Idee.   :applaus:  Im Moment kann ich sie leider nicht verwenden (-> weil ja der Schlüssel unterschiedilch sein kann,  z.B. bei einer älteren Oracle-Version...), aber es ist gut zu wissen für die Zukunft. 

Kerstin


----------

