Hallo Peter, hallo Chris,

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

Antwort per Email an