Meinews.de  


Zurück   Meinews.de > Forum > Newsgroups microsoft.public.de.* 1 Forum > Newsgroup microsoft.public.de.german.entwickler.dotnet.csharp
Registrieren FAQ Benutzerliste Kalender Suchen Heutige Beiträge Alle Foren als gelesen markieren

Newsgroup microsoft.public.de.german.entwickler.dotnet.csharp Forum microsoft.public.de.german.entwickler.dotnet.csharp

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 10-29-2009, 03:21 PM
Michael Voss
 
Beiträge: n/a
Standard Event bei Starten eines bestimmten externen Prozesses

Hallo!

Ich bin auf der Suche nach einem möglichst ressourcenschonenden Weg,
mitzubekommen, ob auf dem Rechner, auf dem meine Applikation läuft, ein
bestimmter Prozess (dessen Namen ich kenne) neu gestartet wird. Gibt es da
etwas anderes als regelmäßig zu suchen, ob ein solcher Prozess läuft ? Das
würde ich nämlich gerne vermeiden, da ich dies in sehr kurzen Abständen
wiederholen müsste, es soll nämlich eigentlich verhindert werden, dass
dieser Prozess überhaupt gestartet wird. Hintergrund ist, dass während einer
Wartung bestimmte Programme nicht manuell vom Benutzer gestartet werden
dürfen; mein Programm besitzt aber (wahrscheinlich) nicht die Rechte, die
entsprechende exe einfach umzubenennen, zu löschen oder so...

Danke schon mal!
Michael


Mit Zitat antworten
Alt Today
Advertising
Google Adsense
 
This advertising will not be shown
in this way to registered members.
Register your free account today
and become a member on
Meinews.de
Standard Sponsored Links

  #2  
Alt 10-29-2009, 07:50 PM
Frank Dzaebel
 
Beiträge: n/a
Standard Re: Event bei Starten eines bestimmten externen Prozesses

Hallo Michael,

> Ich bin auf der Suche nach einem möglichst ressourcenschonenden Weg,
> mitzubekommen, ob auf dem Rechner, auf dem meine Applikation läuft,
> ein bestimmter Prozess (dessen Namen ich kenne) neu gestartet wird.


Nun, im Prinzip gäbe es die WMI-Klasse Win32_ProcessStartTrace,
die über einen asynchronen Event einen Handler verbinden könnte.
Die WMI-Beispiele benötigen aber FullTrust bei der Start-Methode:

class Prozess
{
public static void Init()
{
// using System.Management / Verweis: System.Management.dll
ErzeugeEvent("Win32_ProcessStartTrace");
// ErzeugeEvent("Win32_ProcessStopTrace");
}

[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
private static void ErzeugeEvent(string wmiKlasse)
{
ManagementEventWatcher watcher = new ManagementEventWatcher(
new WqlEventQuery("SELECT * FROM " + wmiKlasse));
watcher.EventArrived += new EventArrivedEventHandler(
Prozess_EventArrived);
watcher.Start();
}

private static void Prozess_EventArrived(object sender,
EventArrivedEventArgs e)
{
string info;
if (e.NewEvent.ClassPath.Path.EndsWith("StopTrace"))
info = "gestoppt";
else info = "gestartet";
MessageBox.Show("Prozess " + info + ": " +
e.NewEvent.Properties["ProcessName"].Value);
}
}

// oder:
// [Using WMI to monitor process creation, deletion and modification in
..NET]
// http://weblogs.asp.net/whaggard/arch...11/438006.aspx
_______

Etwas ähnliches ließe sich halb-automatisiert so erreichen:
- Menü/Ansicht/ServerExplorer/Server/<DeinPC>/
Verwaltungsereignisse/"Ereignisabfrage hinzufügen"/
Win32_ProcessStartTrace/Weitersuchen/OK/
RechteMaus auf "Win32_ProcessStartTrace Ereignisabfrage" /
"Zum Designer hinzufügen". Im Designer
managementEventWatcher1 markieren / in Eigenschaften auf
das gelbe Blitz-Symbol / EventArrived Doppelklick.

________

In einem Timer je nach Anforderung der Erkennungs-
Genauigkeit ein GetProcessesByName laufen zu lassen,
ist auch nicht besonders aufwendig, denn es bleibt normal
im 100 Millisekunden Bereich bei handelsüblichen PCs.

[Process.GetProcessesByName-Methode (String) (System.Diagnostics)]
http://msdn.microsoft.com/de-de/library/z3w4xdc9.aspx

________

Ansonsten würde man auf globale Hooks ausweichen,
die dann aber eher auf Events des Windows des Prozesses
(falls vorhanden) reagieren würden:

[How to set a Windows hook in Visual C# .NET]
http://support.microsoft.com/kb/318804/en-us

[C#: How should I use ITaskbarList and how to detect program start?]
http://www.neowin.net/forum/index.php?showtopic=637769

[Cutting Edge: Windows Hooks in the .NET Framework]
http://msdn.microsoft.com/en-us/magazine/cc188966.aspx

______

Wenn es alles "Deine" Prozesse wären, hättest Du noch
bessere Möglichkeiten ... aber das nehme ich mal nicht an.


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Mit Zitat antworten
  #3  
Alt 10-29-2009, 08:13 PM
Frank Dzaebel
 
Beiträge: n/a
Standard Re: Event bei Starten eines bestimmten externen Prozesses

Nachtrag ...

die (Kernelmode) Treiber-Ebene sollte nicht vergessen
werden, wenn Aufwand keine Rolle spielt:

[PsSetCreateProcessNotifyRoutine]
http://msdn.microsoft.com/en-us/library/ms802952.aspx

[PsSetCreateProcessNotifyRoutineEx]
http://msdn.microsoft.com/en-us/library/bb679945.aspx

[CodeProject: Detecting Windows NT/2K process execution]
http://www.codeproject.com/KB/threads/procmon.aspx

[Kernel Data and Filtering Support for Windows Server 2008]
http://download.microsoft.com/download/4/4/b/44bb7147-f058-4002-9ab2-ed22870e3fe9/Kernal%20Data%20and%20Filtering%20Support%20for%20 Windows%20Server%202008.doc

Man kann diese dann über DeviceIoControl im Usermode
auch über C# ansprechen. Nur der Vollständigkeit halber, falls
extreme Performance notwendig ist.


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Mit Zitat antworten
  #4  
Alt 11-02-2009, 11:03 AM
Michael Voss
 
Beiträge: n/a
Standard Re: Event bei Starten eines bestimmten externen Prozesses

Hallo!

Vielen Dank für die Hinweise; da werde ich ziemlich sicher etwas finden. So
extrem sind die Performance-Anforderungen nicht. Der Prozess, dessen Start
ist mitbekommen möchte, gehört mir leider nicht, aber ich muss
wahrscheinlich reagieren, bevor das erste Fenster dieses Prozesses erzeugt
wird.

Ich hoffe, dass ich dazu komme, mein Ergebnis zu posten...

Danke
Michael


Mit Zitat antworten
 
Antwort


Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen
Es ist dir nicht erlaubt, auf Beiträge zu antworten
Es ist dir nicht erlaubt, Anhänge anzufügen
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten

vB Code ist An
Smileys sind An
[IMG] Code ist An
HTML-Code ist Aus

Ähnliche Themen
Thema Erstellt von Forum Antworten Letzter Beitrag
Durchschnittliche CPU-Last eines Prozesses ermitteln Bernd Hohmann Newsgroup de.comp.os.unix.shell 6 09-15-2009 03:46 PM
Problem mit PostQuitMessage nach dem Starten eines Explorer-Prozesses Felix Opatz Newsgroup de.comp.os.ms-windows.programmer 1 06-15-2009 03:15 AM
Automatisches Starten eines Daemon-Prozesses Rudolf Ziegaus Newsgroup de.comp.os.unix.linux.misc 5 02-23-2009 10:34 AM
Abstuerze eines Java-Prozesses Mark Knobloch Newsgroup de.comp.lang.java 4 03-12-2008 08:14 AM
Handle eines Prozesses herausfinden und terminieren. Thomas Steinbach Newsgroup de.comp.os.ms-windows.programmer 10 02-05-2008 11:08 AM


Alle Zeitangaben in WEZ. Es ist jetzt 12:45 PM Uhr.





Powered by: vBulletin Version 3.6.7 (Deutsch)
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Forum SEO by Zoints