Hallo Leute, ich hab folgendes Problem: Ich möchte per WMI Infos vom PC auslesen. Da es sich bei der App um eine Webstart-App handelt, möchte ich weder DLLs noch sonst irgendwelche zusätzlichen JARs ausliefern.
Meine erste Idee war also die WMIC per Process auszuführen und die Ausgabe zu parsen.
So kann ich z.B. wenn ich lokal am PC sitze per "wmic memphysical" einiges über den vorhandenen Speicher in Erfahrung bringen.
Doch wenn ich das ganze per Java-Process ausführe, bekomme ich keine Ausgabe. Der Prozess cheint stehen zu bleiben. Mein erster Verdacht: Das Ding startet im CLI Modus. Nagut, Workaround ist schnell gefunden: Ich verwende eine Bat-Datei und starte über die das ganze.
Doch das Resultat bleibt das gleiche. Die Ausgabe bleibt leer.
Zu Testzwecken hab ich dann folgende Bat-Datei geschrieben:
Führe ich das File aus funktioniert es.
Führe ich das Script per Java aus, funktioniert es nicht. Mit folgendem Code tue ich das:
Das File liegt im Temp-Verzeichnis. Es existiert und wenn ich es mit Doppelclick starte, tut es was es soll. Starte ich es per Java wird das temp.txt angelegt, bleibt aber leer. Der Prozess hat irgendwelche Probleme denn er returniert immer 1.
Ich weiß aber nicht woran es liegt. Irgendwelche Ideen?
Meine erste Idee war also die WMIC per Process auszuführen und die Ausgabe zu parsen.
So kann ich z.B. wenn ich lokal am PC sitze per "wmic memphysical" einiges über den vorhandenen Speicher in Erfahrung bringen.
Doch wenn ich das ganze per Java-Process ausführe, bekomme ich keine Ausgabe. Der Prozess cheint stehen zu bleiben. Mein erster Verdacht: Das Ding startet im CLI Modus. Nagut, Workaround ist schnell gefunden: Ich verwende eine Bat-Datei und starte über die das ganze.
Doch das Resultat bleibt das gleiche. Die Ausgabe bleibt leer.
Zu Testzwecken hab ich dann folgende Bat-Datei geschrieben:
Code:
wmic memphysical > ./temp.txt
Führe ich das File aus funktioniert es.
Führe ich das Script per Java aus, funktioniert es nicht. Mit folgendem Code tue ich das:
Code:
File tmpFile = File.createTempFile("tmp2", ".txt");
tmpFile.deleteOnExit();
System.out.println("Pfad: " + tmpFile.getParent());
File exec = new File(tmpFile.getParent(), "test.bat");
List<String> execs = new ArrayList<String>();
execs.add(exec.getAbsolutePath());
System.out.println(exec.getAbsolutePath());
ProcessBuilder pb = new ProcessBuilder(execs);
pb.directory(tmpFile.getParentFile());
Process p = pb.start();
Scanner s = new Scanner(p.getInputStream());
if(s.hasNextLine()) {
System.out.println(s.nextLine());
p.destroy();
}
s.close();
System.out.println("Ergebnis: " + p.waitFor());
Das File liegt im Temp-Verzeichnis. Es existiert und wenn ich es mit Doppelclick starte, tut es was es soll. Starte ich es per Java wird das temp.txt angelegt, bleibt aber leer. Der Prozess hat irgendwelche Probleme denn er returniert immer 1.
Ich weiß aber nicht woran es liegt. Irgendwelche Ideen?