vielen Dank f�r Eure Antworten. Ich habe ein wenig mit WMI experimentiert und mir schien auch die ParentProcessId das Mittel der Wahl. Es liegt aber leider eher an den Office-Applikationen, die z.T. neue Prozesse erzeugen, z.T. aber auch nicht. So gibt es z.B. nur einen Winword.exe-Prozess, egal wie viele Dokumente offen sind... Dazu gibt es noch weitere interessante Ph�nomene: startet man z.B. zweimal Word, erh�lt man mit WMI (Win32_Process.Create) stets eine neue PID zur�ck. Es bleibt aber nur die jeweils �lteste "aktiv", d.h. in der Taskliste zu sehen. Es gibt aber einen Kommandozeilenparameter f�r Word, mit dem man explizit einen neuen Task erzeugt (der dann auch in der Liste auftaucht). Nur kann man dann keine bestehenden Dateien �ffnen!
Mir ging es ja eigentlich um das Schlie�en der Datendateien, aber die verschiedenen Programme verhalten sich auch hier sehr uneinheitlich: Word/Excel sperren die ge�ffneten Dateien, w�hrend das z.B. Powerpoint/Notepad nicht tun. Deshalb klappt auch die Guerilla-Taktik nicht, timergesteuert die betroffenen Dateien umzubenennen und im Fall einer Exception zu wissen, da� die Datei noch ge�ffnet sein mu�.
Naja, ich werde wohl noch weiter lesen m�ssen...
Gru�, Helge
Christoph Wille schrieb:
Die Idee mit WMI hat was, weil da kann ich ja mit einer Query draufgehen ("liste mir alle Wordprozesse auf") - und an sich k�nnte man ja �ber den "Erzeuger-Prozess" rauskriegen, was denn jetzt der neueste ist, den ich gerade angelegt habe.
Chris
At 03:14 PM 1/4/2004, you wrote:
Hast du es schon mit WMI probiert? Das hat bei mir eigentlich immer gut
funktioniert. Win32_Prozess liefert auch mehr infos als die Processklasse
uas System.Diagnostics.
lG Peter
> -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of Helge Lenuweit > Sent: Sunday, January 04, 2004 12:49 PM > To: [EMAIL PROTECTED] > Subject: [CSharp.net] Prozesse �berwachen > > Hallo Liste, > > ich m�chte gern externe Anwendungen starten und mitbekommen, > wenn sie beendet werden. Ich dachte dabei an > System.Diagnostics.Process und wollte die Zuordnung �ber die > ProcessID herstellen, also z.B. so: > Process prDoc = new Process(); > prDoc.StartInfo.UseShellExecute = true; > prDoc.StartInfo.FileName = strFullPathFileName; // z.B. > "C:\\Testdok.doc" oder "C:\\Testtxt.txt" > prDoc.Start(); > > und dann int ProcessID = prDoc.Id; > > Leider klappt das so nicht immer, denn in der letzten Zeile > bekomme ich bei MS-Office-Applikationen eine > InvalidOperationException zur�ck, die eigentlich lt. Doku nur > dann auftreten darf, wenn der Prozess nicht gestartet wurde. > Bei Notepad funktioniert es hingegen einwandfrei. > > Laut einer verwegenen MSDN-Seite (hab den Link jetzt nicht > zur Hand) haben die Office-Programme eine Besonderheit beim > Eintrag ihres Prozesses in die Prozesstabelle der > ausf�hrenden Maschine. Auf der bewu�ten Seite, die aber das > Word-Objektmodell zur�ckliefern soll, werden Tricks �belster > Sorte (20x versuchen, dazwischen Sleeps von je > 1/2 Sekunde, Fokuswechsel auf die eigene Anwendung) > verwendet, deren Einsatz ich nach M�glichkeit vermeiden will. > Gibt es eine zuverl�ssige Methode, einen Prozess zu starten > und die Prozessid zur�ckzugeben (oder eine andere eindeutige > Referenz auf den laufenden Proze�)? > > Ich will dabei nach M�glichkeit nicht mit dem Exited-Ereignis > arbeiten, weil meine Anwendung u.U. zwischendurch beendet > wird (ich schreibe Temp-Dateien mit der Proze�information). > > Gru�, Helge
_______________________________________________ CSharp.net mailing list [EMAIL PROTECTED] http://www.glengamoi.com/mailman/listinfo/csharp.net
_______________________________________________ CSharp.net mailing list [EMAIL PROTECTED] http://www.glengamoi.com/mailman/listinfo/csharp.net
