2016-07-12 8 views
2

Ich habe eine Eltern-App, die mehrere Instanzen einer untergeordneten App ausführt. Ich möchte einen "Start" -Button für jeden dieser Prozesse deaktivieren können, sollte der Prozess ausgeführt werden.C# Wie identifiziere ich Mitglied einer Menge von Prozessen mit demselben Namen?

Das Abrufen einer Liste der laufenden Instanzen der App ist einfach genug (Process.GetProcessesByName ("Bob")) - was ich tun muss ist Schleife durch die Liste der zurückgegebenen Prozesse (alle mit dem gleichen Namen) und identifizieren, welche Instanzen ausgeführt werden.

Die Instanzen haben eine öffentliche Variable namens ClientId - wie kann ich die ClientId der Prozesse lesen, um zu sehen, welche laufen?

Gibt es einen besseren Ansatz?

+2

Wenn die Eltern-App die Kinder spawnt, dann muss ich sie selbst pflegen, z. B. durch Speichern der PID, wenn Sie sie in ein Wörterbuch mit Ihrem ClientId-Bezeichner starten. Dann später können Sie ['GetProcessById()'] (https://msdn.microsoft.com/en-us/library/system.diagnostics.process.getprocessbyid (v = vs.110) .aspx) und das Wörterbuch sagt Ihnen welches ist was. Ansonsten sieht es so aus, als ob Sie [Interprozesskommunikation] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa365574 (v = vs.85) .aspx) möchten. – Quantic

Antwort

1

Wenn Sie die Prozesse mit Process.Start(fileName) beginnen, können Sie das Prozessobjekt speichern zurückgegeben:

Process myProcess = Process.Start(fileName); 

Prozesse haben eine HasExited Eigenschaft, die Sie überprüfen können.