batch datei wird nicht aufgerufen

Hallo!

Ich habe ein Problem: Ich möchte eine externe batch-Datei aufrufen, deren Pfad auf jeden Fall richtig ist,
doch wenn ich das Programm starte, sehe ich - nichts. Kein Exception, einfach nichts...

Ich habe auch schon gegoogled und das Forum hier durchsucht und habe auch ein paar Alternativen gefunden, doch es funktioniert nichts. ;(

Könnt ihr mir vielleicht helfen?



Java:
import java.io.IOException;

public class Test {
	
	public static void main(String[] args) {
		String startclient = "C:(\\...)\\startclient.bat";

		try {
			Runtime.getRuntime().exec("cmd /c \""+startclient+"\" ");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}
 
Schon mal geguckt, ob die Batch-Datei richtig ausgeführt wird? Z.B. an den Anfang der bat-Datei so etwas wie [c]echo "I'M ALIVE!" > C:\es_geht.txt[/c] geschrieben?

Die Datenströme (stdin, stdout, stderr) des gestarteten Prozesses werden von der JVM nicht automatisch mit denen des JVM-Prozesses verwurstet. Wenn also dein Programm nur darüber kommuniziert und du nichts weiter bemerkst, dann … könnte es daran liegen. 😉

Du könntest aber auch noch ein [c].waitFor()[/c] an dein [c]exec()[/c] dranhängen. Wenn der gestartete Prozess noch läuft, sollte die JVM auf selbigen warten.

Ark
 
… könnte es daran liegen. 😉

Liegt mit Sicherheit daran.

Kopiervorlage für den TO:

Java:
		// create the process
		Process proc = null;
		try {
			proc = Runtime.getRuntime().exec(.....);
		} catch (IOException e) {
			e.printStackTrace();
			return;
		}

		// read stdout
		BufferedReader br = null;
		String buffer = null;
		try {
			br = new BufferedReader(new InputStreamReader(proc.getInputStream()));
			while ((buffer = br.readLine()) != null) {
				System.out.println(buffer);
			}
		} catch (IOException e) {
			e.printStackTrace();
			return;
		} finally {
			HelperTTG.close(br);
			proc.destroy();
		}
 
Also die die batchdatei lässt sich ausführen, denn sie startet ein anderes Programm, welches ich aber nicht sehe, wenn ich die aufrufe... Also wird sie gar nicht gestartet.
 
Das wäre so zumindest für mich keine hinreichende Begründung. Wenn du zum Beispiel in einem anderen Arbeitsverzeichnis bist (oder allgemein in einer anderen Umgebung mit anderen Variablen/-werten etc.), kann es sein, dass zwar die Batch-Datei gestartet wird, nicht aber das eigentliche Programm (weil es z.B. nicht gefunden wird, oder das Programm stürzt sofort nach Start ab, weil irgendwelche Parameter nicht stimmen etc.).

Schon mal die vielen verschiedenen Ansätze probiert, die wir geliefert haben?

Ark
 
Na, dann streu mal ein paar echos in deine bat-Datei und schau, wo die Ausführung hängenbleibt. 😉

Ark
 
Also ich hab "echo ich bin da" eingefügt, und das zeigt er auch an.
Aber dann kommt nichts, obwohl das Programm makellos funktioniert, wenn ich sie anklicke und ausführe.
 
Seit Java 7 kann man die Streams eines gestarteten Prozesses direkt per INHERIT in die eigenen umleiten bzw. auch direkt in eine Datei! Anbei ein minimal Beispiel:

Java:
ProcessBuilder processBuilder = new ProcessBuilder("CMD", "ARG1", ...);
processBuilder.redirectOutput(Redirect.INHERIT);
processBuilder.redirectError(new File("c:\tmp", "error.log"));
process = null;
try {
    process = processBuilder.start();
} catch (IOException e) {
    //catch io exception
}
 
Also ich würde es unter Windows nicht mit ner Batch-Datei (.bat) machen, sondern eher mit Visual Basic Script (.vbs) versuchen.

Etwa sowas:

Code:
Set ws = WScript.CreateObject("WScript.Shell")
' Hier wird ein Programm gestartet
ws.Run("C:\irgendwas.exe", , False)
' False => Script wartet nicht auf Beendigung des gestarteten Programs
Set ws=Nothing
 

Neue Themen


Zurück
Oben