Programm mittels Java installieren

Status
Nicht offen für weitere Antworten.

omex

Mitglied
Guten Abend,

ich möchte gerne über Java ein Programm installieren.

Möchte gerne Postgres installieren, es soll geprüft werden ob Postgres schon installiert ist und wenn nein, dann soll folgende msi PostgreSQL: File Browser "postgresql-8.3.1-1.zip postgresql-8.3.1-1.zip" ausgeführt werden.

Ich würde mich freuen, wenn mir Jemand einen Denkanstoß geben könnte in welche Richtung ich mich bewegen muss
 
Ob ein PostgreSQL Ordner in /Programme oder /Program Files besteht. Aber es sollte eigentlich auch reichen, wenn ich aus Java die .msi Datei starten könnte.

Hast du mir einen Tipp?
 
hallo, vielen dank schonmal für den tipp.

ich habe leider ein kleines problem.

es wird immer folgende exception geworfen, der pfad der excel datei stimmt aber 🙁. wo liegt da das problem?

Quellcode:

Code:
import java.io.IOException;

public class TestClasse {

	public static void main(String[] args) throws IOException {
		ProcessBuilder builder = new ProcessBuilder(
				"C:\\" +
				"Vorlage.xls");
		Process p = builder.start();
	}
}

Exception

Code:
Exception in thread "main" java.io.IOException: CreateProcess: C:\Vorlage.xls error=193
	at java.lang.ProcessImpl.create(Native Method)
	at java.lang.ProcessImpl.<init>(Unknown Source)
	at java.lang.ProcessImpl.start(Unknown Source)
	at java.lang.ProcessBuilder.start(Unknown Source)
	at TestClasse.main(TestClasse.java:13)
 
dieser fehler code kommt aber auch bei einer exe datei 🙁
oder habe ich ein denkfehler?

will folgende datei starten C:\Program Files\PostgreSQL\8.4\bin\psql.exe
 
Keine Ahnung wo jetzt noch der Fehler liegt.

Vielleicht ist es das Problem, dass es sich um eine .msi Packet handelt.

Ist aber meines Wissens doch auch eine ausführbare Datei.

Kann mir da Jemand noch helfen. Wildcard und co vielen Dank für eure Hilfe.
Code:
import java.io.*; 
import java.util.Scanner; 
import java.io.IOException;

public class TestClasse {

	public static void main(String[] args) throws IOException {
		ProcessBuilder builder = new ProcessBuilder(
				"C:\\ps84\\" +
				"postgresql-8.4-beta1.msi");
		Process p = builder.start();
	}
}

Code:
Exception in thread "main" java.io.IOException: CreateProcess: C:\ps84\postgresql-8.4-beta1.msi error=193
	at java.lang.ProcessImpl.create(Native Method)
	at java.lang.ProcessImpl.<init>(Unknown Source)
	at java.lang.ProcessImpl.start(Unknown Source)
	at java.lang.ProcessBuilder.start(Unknown Source)
	at TestClasse.main(TestClasse.java:13)
 
exe und evtl. bat Dateien sind ausführbar, bei msi bezweifle ich das. wie wärs mit <installationsprogramm> <datei>, also irgendwie "windowsinstaller irgendwas.msi"
 
Bin kein Windowsler, aber laut Google startet man die Dinger wohl mit einem Programm msiexec.
Versuch einfach mal mit Desktop#open, wenn das nicht hilft, dann in der Richtung:

Java:
ProcessBuilder builder = new ProcessBuilder("msiexec", "C:\\ps84\\postgresql-8.4-beta1.msi");
 
Hey suppi das kappt,

nun habe ich leider noch n kleines problem :/

Ich möchte den Registry Eintrag von Version 8.2 bis 8.4 überprüfen.

Es wird eine Exception verlangt.

Wenn NoSuchElementException geworfen wird, soll die Methode sich wiederholen.

Leider wird die Methode dann beendet ( Was ja auch richtig sein sollte !?)

Frage nun:

Gibt es eine Möglichkeit eine Exception umzuleiten, dass er nicht die Methode beendet?


Code:
public boolean setPostSQL() {
			
	do {
	
	try {   	
			
			ProcessBuilder builder = new ProcessBuilder( 
			  "reg", "query", 
			  "\"HKLM\\SOFTWARE\\PostgreSQL\\Services\\postgresql-8." + i); 
			  			
  			
  			Process p = builder.start(); 
			Scanner scanner = new Scanner( p.getInputStream() ). 
			useDelimiter( "    \\w+\\s+\\w+\\s+" ); 
			scanner.next(); 
			System.out.println( scanner.next() );
			this.postSQL = true;
			
	}catch (NoSuchElementException e){

	    this.postSQL = false;
	
	}
   catch ( IOException e ) 
	    { 
	      System.err.println( "Schreib-/Leseprobleme!" ); 
	    } 

   
   	  this.i++;	
	} while (postSQL == true);

	return this.postSQL = true;
}
 
ich versteh die Frage jetzt nicht so ganz, was soll bei einer NoSuchElementException passieren?

Aufjedenfall gibt die Methode IMMER true zurück:
Java:
return this.postSQL = true;
Du musst entweder == true schreiben, oder du lösst es weg und schreibst nur:
return this.postSQL
was eigentlich der üblichere Weg ist.
 
danke SChandro, habe ich auch gerade mit dem rückgabewert gemerkt.
NoSuchElementException wurde geworfen, als ich die Methode das Erstemal aufgeführt habe.
Deshalb habe ich die Exception mit eingebaut.

Mein primäres Problem ist, dass ich eine Exception angeben muss. Und wenn z.B. der Registry Schlüssel für Version 8.2 nicht auf dem System ist, wirft mir Java eine NoSuchElementException.

Ich möchte jetzt aber, wenn eine Exception für Version 8.2 geworfen wird, dann Version 8.3 auf Vorhandensein prüfen.

Java hintert mich aber leider daran, weil die Exception die Methode beendet.

Ps: Gibt es eigentlich eine Möglichkeit eine Methode nur dann zu starten, wenn z.B. Linux installiert ist?

Vielen Dank euch allen.
 
Zuletzt bearbeitet:
mach das
this.postSQL = false;
aus dem
catch (NoSuchElementException e){...}
Block raus, dann läuft die Methode weiter. Und zwar unendlich. Du brauchst also irgendeine andere Abbruchbedingung.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben