Laden...

AUf Prozess warten

Erstellt von Matrix-NTN vor 19 Jahren Letzter Beitrag vor 19 Jahren 3.778 Views
M
Matrix-NTN Themenstarter:in
267 Beiträge seit 2005
vor 19 Jahren
AUf Prozess warten

Hallo zusammen,

habe mich gerade auf die frage gestürzt ob ich warten kann bis ein bestimmter Prozess gestartet wurde:

z.B.: Programm läuft und nun starte ich z.B.: den Calc.exe dann soll im Programm eine meldung erscheinen.
Mit einem Timer bekomme ich das hin aber geht das acuh irgendwie ohne Timer?

mfg
Tobias

No Risk, No Fun

B
483 Beiträge seit 2005
vor 19 Jahren

Hallo,
einfach mit do while Schleife.
Gruss,
Boris

M
Matrix-NTN Themenstarter:in
267 Beiträge seit 2005
vor 19 Jahren

Ja, aber dann ist der Rechner ziemlich ausgelastet...

Mfg
Tobias

No Risk, No Fun

T
34 Beiträge seit 2005
vor 19 Jahren

Man kann das mit WMI machen. Da wird ein neues event erzeugt, der darauf wartet bis ein neuer process gestartet wird.

Aber vorher musst du die System.Management.dll referenzieren und usen!

Hier der code:


static void Main(string[] args)
{
	WqlEventQuery eq = new WqlEventQuery("__instancecreationevent",newTimeSpan(0, 0, 1), 
        "targetinstance ISA 'win32_process'");
	ManagementEventWatcher watcher = new ManagementEventWatcher(eq);
	watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
	watcher.Start();

	Console.ReadLine();
}

static void watcher_EventArrived(object sender, EventArrivedEventArgs e)
{
	Console.WriteLine("Neuer Process");
// Oder dein code
}


Fehlender Plan wir durch Wahnsinn erstezt!!

M
Matrix-NTN Themenstarter:in
267 Beiträge seit 2005
vor 19 Jahren

Hey cool das funzt, danke
Aber kann ich darauf auch noch auslesen wie der Process heist?
Habe in e und sender schong eschaut aber da gibts nichts....
oder habe ich das übersehen?
Mfg
Tobias

No Risk, No Fun

T
34 Beiträge seit 2005
vor 19 Jahren

Der Event reagiert auf alle Processe die gestartet sind seit dem dein Programm läuft.
Man kann mit WMI auch machen das der Event auf einen bestimmten Process reagiert.

Fehlender Plan wir durch Wahnsinn erstezt!!

M
Matrix-NTN Themenstarter:in
267 Beiträge seit 2005
vor 19 Jahren

und wie funktioniert das?
Kannst du mir bitte ein Beispiel schreiben?

Mfg Tobias

No Risk, No Fun

T
34 Beiträge seit 2005
vor 19 Jahren

Also im Moment weis ich das nicht so genau, ich muss erstmal selber rumprobieren.

Fehlender Plan wir durch Wahnsinn erstezt!!

F
66 Beiträge seit 2004
vor 19 Jahren

hm klingt interessant, momentan arbeite ich auch an etwas wo ichsowas brauche und hab momentan per timer jede sekunde eine abfrage ob bestimmte Prozesse laufen.

Ich frage mich nur grade was besser ist, WMI wird ja wohl auch so arbeiten das er das regelmäßig abfragt ?

M
Matrix-NTN Themenstarter:in
267 Beiträge seit 2005
vor 19 Jahren

Ja aber der lastet das system nicht so aus und ovrallem bei sowas finde ich mit timer zu arbeiten etwas doof...

No Risk, No Fun

F
66 Beiträge seit 2004
vor 19 Jahren

find Timer dabei garnicht so dumm, aber per WMI kann man da auch checken ob ein Programm beendet wurde ?

Momentan hab ich es so das ich per schleife Prozesse erstelle und je nach dem ob Länge null ist läuft er oder nicht, was besseres viel mir nicht ein da ja die anzahl der zu prüfenden Prozesse dynamisch ist und man ja nicht dynamisch eventHandler erstellen kann soweit ich weiß, außer einen handler für alles und das dann per switch case oder so schecken ob das der "richtige" prozess ist.

Werd erstmal so mit prozess arbeiten und dann schauen wie die auslastung bei mehr als 20 Prozessen ist.

T
34 Beiträge seit 2005
vor 19 Jahren

Ich habe vergessen zu erwähnen das man mit TimeSpan() die Zeit einstellen kann.

Fehlender Plan wir durch Wahnsinn erstezt!!

T
34 Beiträge seit 2005
vor 19 Jahren

Ich weis jetzt wie der Event auf ein bestimmten Process reagieren kann z.B notepad.exe

Hier der Code:


static void Main(string[] args)
{
	WqlEventQuery eq = new WqlEventQuery(" __instancecreationevent", 
    new TimeSpan(0, 0, 1), "targetinstance ISA 'win32_process' and targetinstance.name = 'notepad.exe'  ");     //anstat notepad.exe kannst du dein process reinschreiben
	ManagementEventWatcher watcher = new ManagementEventWatcher(eq);
	watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
	watcher.Start();

	Console.ReadLine();
}
static void watcher_EventArrived(object sender, EventArrivedEventArgs e)
{
	Console.WriteLine("Notepad wurde gestartet");
}

Fehlender Plan wir durch Wahnsinn erstezt!!

F
66 Beiträge seit 2004
vor 19 Jahren

hm aber kann man damit auch mehrere Prozesse überwachen? natürlich variabel

per timer auf1sekunde hab ich momentan 3% auslastung bei etwa 6 Prozessen die ich überprüfe, also unbenutzbar wenn es mehr als 1-2 sind, den 3% sind schon recht viel, grad bei nem Athlon64 3200+ denk ich.

F
66 Beiträge seit 2004
vor 19 Jahren

Original von ternanok
Man kann das mit WMI machen. Da wird ein neues event erzeugt, der darauf wartet bis ein neuer process gestartet wird.

Aber vorher musst du die System.Management.dll referenzieren und usen!

Hier der code:

  
static void Main(string[] args)  
{  
  WqlEventQuery eq = new WqlEventQuery("__instancecreationevent",newTimeSpan(0, 0, 1),   
        "targetinstance ISA 'win32_process'");  
  ManagementEventWatcher watcher = new ManagementEventWatcher(eq);  
  watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);  
  watcher.Start();  
  
  Console.ReadLine();  
}  
  
static void watcher_EventArrived(object sender, EventArrivedEventArgs e)  
{  
  Console.WriteLine("Neuer Process");  
// Oder dein code  
}  
  
  

hm bin das grad am ausprobieren und hab aus dem handler public gemacht und es allegmein in mein programm gepackt, sprich inden form konsstruktor, nur irgendwie will er nix machen wenn ich ein programm starte ?
Gibts da eventuell was zu beachten ?
hm hat sich erledigt nachdem ich den code an den anfang im konstruktor geschrieben habe O_o

Aber wo ich eh grad hier gepostet hab noch eine frage, gibts auch so ein event für Beendete Prozesse ?