Laden...

System.Diagnostics.Process - Wie erfährt man, dass der Prozess geladen wurde.

Erstellt von Schildkroete vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.949 Views
S
Schildkroete Themenstarter:in
80 Beiträge seit 2012
vor 10 Jahren
System.Diagnostics.Process - Wie erfährt man, dass der Prozess geladen wurde.

Hallo zusammen,

irgendwie werde ich nicht fündig. Wie kann man heraus finden, ob der Prozess einen geladenen Zustand erreicht hat.
Ich starte mein eine Exe über den folgenden Aufruf:

System.Diagnostics.Process process =  System.Diagnostics.Process.Start(programmPath, "");

Ich bin mir auch bewusst, dass die Klasse Process einen Property mit dem Namen StartInfo (Klasse System.Diagnostics.ProcessStartInfo) besitzt. Jedoch finde ich keine Properties oder Funktionen, die mir sagen, dass der Prozess alle nötigen Komponenten geladen hat und läuft.

P.S.: Über die Static Methode GetProcesses nach dem Prozessname zu suchen, ist auch keine Lösung oder WaitForInputIdle zu benutzen. Hat alles nichts gebracht.

Danke im voraus

----ehm............

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo Schildkroete,

wenn es sich um einen Prozess handelt, den du selbst geschrieben hast, kannst du z.B. durch eine systemglobale Semaphore mitteilen, wenn ein bestimmter Zustand erreicht ist. Wenn es ein fremder Prozess ist, bekommt man das, kurz gesagt, gar nicht heraus.

herbivore

1.346 Beiträge seit 2008
vor 10 Jahren

Was vielleicht noch funktionieren könnte (habe es selbst nie benutzt) ist Process.WaitForInputIdle(), ansonsten wird es, wie herbivore gesagt hat, bei fremden Prozessen echt schwierig

Edit: Habe den Startbeitrag nicht gründlich genug gelesen

LG pdelvo

P
660 Beiträge seit 2008
vor 10 Jahren

Hallo,

würde das abfangen von Window Messages an dieser Stelle weiterhelfen?

Managing Application State

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"

S
Schildkroete Themenstarter:in
80 Beiträge seit 2012
vor 10 Jahren

Erst mal danke an alle.

@ProGammer
Eventuell könnte es weiterhelfen. Ist zwar in C++, aber muss mir eine Alternative in C# basteln.

----ehm............

175 Beiträge seit 2010
vor 10 Jahren

Hallo Schildkroete,

irgendwie werde ich nicht fündig. Wie kann man heraus finden, ob der Prozess einen geladenen Zustand erreicht hat.

Wie definierst Du "Zustand geladen"? Ich definiere es so: Das Betriebssystem hat den Andressraum angelegt, den Code geladen und angefangen den Code auszuführen.

Wenn Du das ebenso definierst, dann müsste doch eigentlich die verbrauchte CPU-Zeit im User-Space den Zustand verraten - ist diese > 0, dann ist der Prozess geladen und ist losgelaufen (was nicht zwangsläufig bedeutet, dass die Applikation korrekt gestartet ist - u. U. konnte eine benötigte DLL nicht geladen werden oder eine DLL wirft in der DllMain Funktion einen Fehler, oder oder oder)....

Also wie dem auch sei, Process.UserProcessorTime könnte Dir helfen....

Bye,
Michael

Debuggers don't remove Bugs, they only show them in Slow-Motion.

S
Schildkroete Themenstarter:in
80 Beiträge seit 2012
vor 10 Jahren

@m.knigge

Da scheint das Problem zu sein. Denn ich brauche den Zustand eines gestarteten Prozesse, wo es den COM Server gestartet hat.
Problem tritt z.B. häufig auf, wenn man zwei oder mehrere Versionen eines Programms auf seinem Rechner hat, dem man per COM Aufruf starten kann (bestes Beispiel MS WORD).

Nun tritt oft das Problem, dass beim COM Aufruf zwar der nötige Prozess gestartet wird, aber in Folge wird auch ein Schwester-Prozess gestartet (z.B. Version 2010 mit Version 2007).
Und somit ist eine vernünftige Verknüpfung zum COM Interface unmöglich, außer man überlässt dem User diese zwei Schritte manuell zu machen.

  1. Starte Programm.
  2. Drücke auf den Knopf zum Programm verbinden über COM Interface.

----ehm............