C# Process Klasse: prüfen ob Programm schon/noch läuft

deadline

Erfahrenes Mitglied
Hi Leute,
ich hoffe ihr könnt mir helfen.
Hier mal die Geschichte außenrum, damit ihr versteht worums geht:
Für meinen Arbeitgeber möchte ich einen Windows Dienst erstellen (Meine Frage bezieht sich aber nicht auf Dienste, sondern allgemein um .NET, weswegen ich dieses Forum gewählt habe).
Wir bekommen von einer anderen Firma eine exe Datei gestellt, die Serverfunktionen zur Verfügung stellt. Diese muss aber per autostart gestartet werden und es gibt keine Überwachungsfunktion dafür.
Jetzt hab ich mir gedacht ich nehme die Process Klasse und starte diese Datei und fange die Ausgaben ab. Das funktioniert schon ganz gut, allerdings möchte ich überprüfen, ob die schon Datei gestartet ist um Exceptions aus dem weg zu gehen (die Dienstverwaltung meckert sonst, bzw. ich verwende die Ereignisanzeige und da wird jede Exception eingetragen, egal ob sie aufgefangen wird oder nicht und das würde die Kunden verunsichern)

Ich hoffe ihr könnt mir folgen. Schonmal danke für die Antworten.

Mfg
Christian
 
Ich bin mir zwar nicht ganz sicher ob ich dich richtig verstanden hab, aber vielleicht is das ja was du suchst:
(vorsicht case-sensitiv)
C#:
static bool processRunning(string processName)
        {
            foreach (Process proc in Process.GetProcesses())
            {
                if (proc.ProcessName.Contains(processName))
                    return true;
            }
            return false;
        }

//E

Namespace ist übrigens System.Diagnostics
 
Zuletzt bearbeitet:
Hi,
also erstmal danke für die Antwort. Es gibt da aber ein grundlegendes Problem: Es werden insgesamt 5 Dienste, die alle eine JVM starten, somit ist der Name aller prozesse java.exe.

Also nach dem Prozess suchen muss ich nicht, da ich das passende Objekt schon habe. Ich bräuchte nur eine Funktion à la meinprozess.isrunning.

Übrigens finde ich es gut, dass du den Namespace mit angibst =)

Mfg
Christian
 
Ich fürchte ich kann nicht ganz folgen.
Bedeutet das jetzt das du 5 Prozesse hast die alle java.exe heißen?
Und was meinst du mit "nach dem Prozess suchen".
Die Funktion prüft ob in der Liste der aktiven Prozesse dein Prozess enthalten ist und wenn dem so ist dann ist der Prozess auch gestartet, denn Prozesse die nicht gestartet sind tauchen in de Liste nicht auf.
 
Du hast also ein System.Diagnostics.Process-Objekt?

Wie wäre es dann einfach mit

Code:
p.HasExited

Wobei p dein Process-Objekt ist.
 
Hi,
ja ich habe ein process Objekt. Mit den 5 Prozessen meinte ich, dass ich 5 Dienste schreiben werde, die in etwa das selbe tun.

Das mit HasExited könnte funktionieren, wobei es eine Exception (InvalidOperationsException) wirft, wenn der Prozess noch nicht gelaufen ist. Aber mal sehen wie ich das einbastel.

Danke für eure Antworten.

Mfg
Christian
 

Neue Beiträge

Zurück