gestarteten Prozess überwachen
FraFu
- java
Hallo!
Ich möchte von einem Java Applet aus eine Datei mit dem zugehörigem
Programm ausführen. Dazu hab ich folgendes Versucht:
Process p;
Runtime rt=Runtime.getRuntime();
p=rt.exec("cmd.exe start c:\temp\test.pdf");
jetzt wird noch ein Thread gestartet, der p überwacht und beim Beenden
des Prozesses etwas ausführen soll.
Das sollte die PDF Datei mit dem Acrobat Reader (oder was auch immer
mit diesem Dateityp verknüpft ist) öffnen.
Das Problem ist aber, dass im Taskmanager die cmd.exe zwar auftaucht,
aber nicht in der Taskleiste und das Fenster verborgen bleibt.
Ich hab auch folgendes versucht:
p=rt.exec("rundll32 SHELL32.DLL,ShellExec_RunDLL c:\temp\test.pdf");
Das funktioniert insofern, dass der Acrobat Reader aufgeht, aber der
Process p liefert sofort zurück, dass er beendet ist.
Ich muss den Process aber überwachen.
Anmerkungen:
Mein Programm braucht nur unter Windows zu laufen und auch da nur in
einem Intranet.
Was mache ich hier falsch? Irgendwelche Tips?
mfg
Frafu
Hallo,
Ich möchte von einem Java Applet aus eine Datei mit dem zugehörigem
Programm ausführen. Dazu hab ich folgendes Versucht:Process p;
Runtime rt=Runtime.getRuntime();
p=rt.exec("cmd.exe start c:\temp\test.pdf");
Hm,
p=rt.exec("cmd.exe /C "start c:\temp\test.pdf"");
jetzt wird noch ein Thread gestartet, der p überwacht und beim Beenden
des Prozesses etwas ausführen soll.Das sollte die PDF Datei mit dem Acrobat Reader (oder was auch immer
mit diesem Dateityp verknüpft ist) öffnen.
Das Problem ist aber, dass im Taskmanager die cmd.exe zwar auftaucht,
aber nicht in der Taskleiste und das Fenster verborgen bleibt.
Nein. Der Reader wird erst gar nicht gestartet. Zu den Parametern von CMD siehe:
C:> help cmd
Ich hab auch folgendes versucht:
p=rt.exec("rundll32 SHELL32.DLL,ShellExec_RunDLL c:\temp\test.pdf");Das funktioniert insofern, dass der Acrobat Reader aufgeht, aber der
Process p liefert sofort zurück, dass er beendet ist.
Richtig, der Prozess zum Starten des Readers ist ja auch beendet. Der Readerprozess selbst ist ein Prozess des Systems, außerhalb der JVM.
Ich muss den Process aber überwachen.
Dann brauchtest Du so etwas wie DDE http://de.wikipedia.org/wiki/Dynamic_Data_Exchange. Suche nach "DDE Acrobat Reader". Oder Du musst eben das PDF-File mit Java-Mitteln bearbeiten http://www.google.de/search?hl=en&q=java+PDF.
viele Grüße
Axel
Nein. Der Reader wird erst gar nicht gestartet. Zu den Parametern von CMD siehe:
C:> help cmd
Werd ich machen. Danke.
Ich muss den Process aber überwachen.
Dann brauchtest Du so etwas wie DDE http://de.wikipedia.org/wiki/Dynamic_Data_Exchange. Suche nach "DDE Acrobat Reader". Oder Du musst eben das PDF-File mit Java-Mitteln bearbeiten http://www.google.de/search?hl=en&q=java+PDF.
PDF war hier nur ein Beispiel. Es soll das jeweilige Programm geöffnet werden, dass mit dem Dokumententyp verknüpft ist.
mfg
frafu
Hallo,
PDF war hier nur ein Beispiel. Es soll das jeweilige Programm geöffnet werden, dass mit dem Dokumententyp verknüpft ist.
Naja "das jeweilige Programm öffnen, das (welches) mit dem Dokumententyp verknüpft ist" ist ja einfach. Die Kontrolle ist das Problem.
Das hier http://www.softhema.de/jpa/index_ger.html liest sich erst mal gut.
viele Grüße
Axel
PDF war hier nur ein Beispiel. Es soll das jeweilige Programm geöffnet werden, dass mit dem Dokumententyp verknüpft ist.
Das hättest du früher schreiben sollen - dann hätte ich mir einen unsinnigen Beitrag gespart ;)
Was dir aber helfen könnte: "start /wait"
Das hättest du früher schreiben sollen - dann hätte ich mir einen unsinnigen Beitrag gespart ;)
Sorry!
Was dir aber helfen könnte: "start /wait"
Das schaut von der Konsole aus als könnte man es brauchen. Allerdings bekomme ich eine IOException, wenn ich den Befehl aus Java heraus aufrufe:
Mein Aufruf:
p=rt.exec("start /wait c:\temp\test.pdf");
Die Exception:
java.io.IOException: CreateProcess: start /wait c:\temp\test.pdf error=2
Jetzt würd mich halt noch interessieren, was Error# 2 ist.
Wenn ich "start /wait c:\temp\test.pdf" in der Konsole aufrufe, funktioniert das. Dh. der Prompt wartet, bis der Acrobat Reader beendet ist.
mfg
frafu
Hallo!»» »» Das hättest du früher schreiben sollen - dann hätte ich mir einen unsinnigen Beitrag gespart ;)
Sorry!
Was dir aber helfen könnte: "start /wait"
Das schaut von der Konsole aus als könnte man es brauchen. Allerdings bekomme ich eine IOException, wenn ich den Befehl aus Java heraus aufrufe:
Mein Aufruf:
p=rt.exec("start /wait c:\temp\test.pdf");
Jetzt hab ichs:
cmd.exe /c start /wait c:\temp\test.pdf
Damit funktionierts.
Danke für die Hinweise!
mfg
frafu
Hi.
Ich hab auch folgendes versucht:
p=rt.exec("rundll32 SHELL32.DLL,ShellExec_RunDLL c:\temp\test.pdf");Das funktioniert insofern, dass der Acrobat Reader aufgeht, aber der
Process p liefert sofort zurück, dass er beendet ist.
Das liegt daran, dass der Prozess nach dem Aufruf des Acrobat-Readers ja seine Schuldigkeit getan hat und sich verabschiedet.
Die einfachste Lösung wäre, einfach das entsprechende Programm (Acrobat-Reader) unabhängig von der Konfiguration des Nutzers direkt zu starten. Die eventuell unterschiedlichen Pfade zur Acrobat-Programmdatei müssten sich über Umgebungsvariablen (Path?) clientseitig beheben lassen.
Gruß
Christoph