Hallo,
ich stehe leider wie der Ochs vorm Berg...
Situation:
Ich möchte über den ProcessBuilder die psexec der pstools aufrufen um damit eine Datei über das Netzwerk auszuführen.
Wenn der Prozess nach einer bestimmten Zeit kein Ergebnis liefert soll er zerstört werden.
Problem:
Der ProcessBuilder startet wie gewünscht die "psexec".
Zum Test hab ich die Streams umgeleitet und bemerkt, dass der Aufruf generell länger braucht als wenn ich es über die Kommandozeile aufrufe. Warum?
Jetzt das eigentliche Problem. Wird die Methode destroy() aufgerufen tut sich nix, wenn die Streams umgeleitet sind. "waitFor()" wird nicht abgebrochen.
Sind die Streams nicht umgeleitet bricht "waitFor" zwar ab aber ich sehe die psexec immer noch im Task Manager. Sie wird also nicht beendet. Wie kann ich das umsetzen?
Da dieser Vorgang sehr oft abläuft würde ich ansonsten sehr viele psexec laufen haben die sich erst nach langer Zeit verabschieden.
Code (Der Timer läuft in einem anderen teil und führt nur process.destroy() aus):
Könnte mir jemand bitte sagen, was ich falsch mache?
P.S.:
ich weiß leider nicht, wie man eine Datei auf einem Netzwerkrechner direkt per java ausführt und ob das überhaupt geht.
ich stehe leider wie der Ochs vorm Berg...
Situation:
Ich möchte über den ProcessBuilder die psexec der pstools aufrufen um damit eine Datei über das Netzwerk auszuführen.
Wenn der Prozess nach einer bestimmten Zeit kein Ergebnis liefert soll er zerstört werden.
Problem:
Der ProcessBuilder startet wie gewünscht die "psexec".
Zum Test hab ich die Streams umgeleitet und bemerkt, dass der Aufruf generell länger braucht als wenn ich es über die Kommandozeile aufrufe. Warum?
Jetzt das eigentliche Problem. Wird die Methode destroy() aufgerufen tut sich nix, wenn die Streams umgeleitet sind. "waitFor()" wird nicht abgebrochen.
Sind die Streams nicht umgeleitet bricht "waitFor" zwar ab aber ich sehe die psexec immer noch im Task Manager. Sie wird also nicht beendet. Wie kann ich das umsetzen?
Da dieser Vorgang sehr oft abläuft würde ich ansonsten sehr viele psexec laufen haben die sich erst nach langer Zeit verabschieden.
Code (Der Timer läuft in einem anderen teil und führt nur process.destroy() aus):
Code:
import java.io.File;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Problem {
private final boolean DEBUG = true;
private String ip;
private String datei;
private Process process;
public Problem(String ip, String datei) {
this.ip = ip;
this.datei = datei;
}
public boolean test() {
boolean result = false;
try {
File f = new File("./pstools/psexec.exe");
ProcessBuilder builder = new ProcessBuilder(f.getAbsolutePath(),
"-n", "3", "\\\\" + ip, datei);
builder.directory(f.getParentFile());
builder.redirectErrorStream(true);
process = builder.start();
if (DEBUG) {
BufferedReader reader = new BufferedReader(new
InputStreamReader(process.getInputStream()));
String s;
while((s = reader.readLine()) != null) {
System.out.println(s);
}
}
process.waitFor();
if (DEBUG) {
System.out.println("ExitValue: " + process.exitValue());
}
if (process.exitValue() == 0) {
result = true;
}
} catch(IOException exception) {
exception.printStackTrace();
} catch(InterruptedException exception) {
exception.printStackTrace();
}
return result;
}
public static void main(String[] args) {
boolean result = new Problem("127.0.0.1", "c:\\a.bat").test();
System.out.println("Ergebnis der Funktion: " + result);
}
}
Könnte mir jemand bitte sagen, was ich falsch mache?
P.S.:

ich weiß leider nicht, wie man eine Datei auf einem Netzwerkrechner direkt per java ausführt und ob das überhaupt geht.
Zuletzt bearbeitet: