ProcessBuilder

Status
Nicht offen für weitere Antworten.

neuland

Mitglied
Versuch zum zweiten, den irgendwie fehlt mein tread!

Ich will eine Install-GUI für Programm unter Linux erstellen.
Dazu würde ich gerne am anfang das root password abfragen und dann dieses z.B. für den sudo Befehl benutzen

Hier mal ein Bsp das nicht geht:

Code:
package base_start;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class Prozess {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ProcessBuilder befehl3 = new ProcessBuilder("sudo", "password", "ls", "-al");
		//Verzeichnis wechseln
		befehl3.directory(new File("/tmp"));
		Process p3;
		try {
			//Befehl ausführen
			p3 = befehl3.start();
			try {
				p3.waitFor();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if (p3.exitValue() == 0)
				System.out.println("success");
				else
				System.out.println("no success");
		} catch (IOException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		}
		
		
		ProcessBuilder befehl2 = new ProcessBuilder("rm", "-R", "test");
		//Verzeichnis wechseln
		befehl2.directory(new File("/tmp"));
		Process p2;
		try {
			//Befehl ausführen
			p2 = befehl2.start();
			try {
				p2.waitFor();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if (p2.exitValue() == 0)
				System.out.println("success");
				else
				System.out.println("no success");
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

		ProcessBuilder befehl1 = new ProcessBuilder("/bin/ls", "-al");
		//Verzeichnis wechseln
		befehl1.directory(new File("/tmp"));
		try {
			//Befehl ausführen
			Process p1 = befehl1.start();
			Scanner sc = new Scanner(p1.getInputStream());
			while(sc.hasNextLine()){
				System.out.println(sc.nextLine());
			}
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		

	}

}

Wenn ich es so ausführe dann warte das Prog. vermutlich auf die PW eingabe.

Code:
ackage base_start;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class Prozess {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ProcessBuilder befehl3 = new ProcessBuilder("ls", "-al");
		//Verzeichnis wechseln
		befehl3.directory(new File("/tmp"));
		Process p3;
		try {
			//Befehl ausführen
			p3 = befehl3.start();
			try {
				p3.waitFor();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if (p3.exitValue() == 0)
				System.out.println("success");
				else
				System.out.println("no success");
		} catch (IOException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		}
		
		
		ProcessBuilder befehl2 = new ProcessBuilder("rm", "-R", "test");
		//Verzeichnis wechseln
		befehl2.directory(new File("/tmp"));
		Process p2;
		try {
			//Befehl ausführen
			p2 = befehl2.start();
			try {
				p2.waitFor();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if (p2.exitValue() == 0)
				System.out.println("success");
				else
				System.out.println("no success");
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

		ProcessBuilder befehl1 = new ProcessBuilder("/bin/ls", "-al");
		//Verzeichnis wechseln
		befehl1.directory(new File("/tmp"));
		try {
			//Befehl ausführen
			Process p1 = befehl1.start();
			Scanner sc = new Scanner(p1.getInputStream());
			while(sc.hasNextLine()){
				System.out.println(sc.nextLine());
			}
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		

	}

}

So geht es, ich kann natürlich das ganze gleich als root user ausführen aber schöner währe es wenn ich im Prog. den user wechseln könnte oder den sudo Befehl ausführe könnte.
 

NTB

Bekanntes Mitglied
Also mir ist nicht ganz klar, was jetzt funktioniert, und was nicht. "Vermutlich" wartet wer wann wie wo? Was sind die Fehler und Fehlermeldungen genau? Zuletzt schreibst Du: "So geht es" - ja öh... hä?

Grundsätzlich zum Konzept: Einerseits sind User irgendwie doof und faul und von daher kann ich verstehen, dass Du Deine Installationsroutine alles machen lassen willst. Ich würde aber keinem dahergelaufenen Programm mein root Passwort aufdrücken. Einem Linux Admin kann man denke ich die Anweisung: "Bitte das Programm als root mit 'sudo meinprogramm' ausführen" zutrauen.
 

HoaX

Top Contributor
oder einfach das ding in ein dem paketmanager entsprechendes format bringen und evtl ein postinstallscript um noch ein paar dinge erledigen zu lassen.
 

neuland

Mitglied
Also mir ist nicht ganz klar, was jetzt funktioniert, und was nicht.

Das zweite geht


zu

paketmanager entsprechendes format bringen und evtl ein postinstallscript

Dazu möchte ich ja eigentlich etwas Programmieren lernen!


Momentan mache ich es jetzt so das ich erst abfrage ob man als root angemeldet ist.
Ist für den User nicht schön, wie gesagt ich wollte eigentlich das root Passwort abfragen und dann im weiteren Verlauf der Installation verwenden.

:cry:
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben