2012-06-15 13 views
8

Ich versuche herauszufinden, ob eine Instanz einer Anwendung (nicht vb.net) bereits läuft - weil ich es starten will, aber ich möchte es nicht starten, wenn es bereits läuft.Wie bekomme ich eine Liste von laufenden Prozessnamen in VB.NET?

Dim proc As Integer = Process.GetProcessesByName(ProcessName).GetUpperBound(0) + 1 

und zurück True, wenn> = 1 (oder nur die Prozessnummer): Ich habe eine Lösung zu prüfen, ob ein Prozess ausgeführt wird gefunden.

Mein Problem ist, das ist eine Anwendung von Drittanbietern, und sein Prozessname ist nicht nur ein Name, aber es enthält eine Versionsnummer (die ich zur Laufzeit nicht wissen kann), und es scheint auch ein * hinzuzufügen 32 (also wahrscheinlich ein * 64, wenn es in x64 installiert ist?).

Ich brauche eine Liste der laufenden Prozesse, nach Namen, und testen, ob "Prozessname" eine Teilzeichenfolge des Namens ist. Aber ich war nicht erfolgreich in einer Liste von Namen, nur Prozess-IDs.

Antwort

7

Ich brauche eine Liste der laufenden Prozesse zu bekommen, nach Namen, und testen, ob „Prozessname“ eine Teil des Namens ist.

könnten Sie verwenden:

Dim procExists as Boolean = Process.GetProcesses().Any(Function(p) p.Name.Contains(processName)) 

Das durch alle Prozesse aussehen wird, und stellen Sie den procExists Wert True, wenn jedes Verfahren, das enthältprocessName in den aktuell ausgeführten Prozesse vorhanden ist. Dies sollte die Existenz der unbekannten Versionsnummer sowie die *32 behandeln, die auftreten kann, wenn Sie auf einem 64-Bit-Betriebssystem ausgeführt werden (das ist die WOW64-Flag, die besagt, dass es ein 32-Bit-Prozess auf einem 64-Bit-Betriebssystem ist).

+0

ich versucht habe, dies aber "Any" funktioniert nicht. Danke für die Erklärung der * 32. – Thalia

+0

@ emptyheaded Fügen Sie einfach "Import System.Linq" am Anfang Ihrer Datei hinzu, und Any sollte funktionieren. Es ist eine LINQ-Erweiterungsmethode (http://msdn.microsoft.com/en-us/library/bb534972.aspx) –

+1

@Reed Copsey: Sollte es nicht "p.ProcessName.Contains" anstelle von p.Name.Contains sein? Und ich bin mir nicht sicher, ob .Any CasEnsensitive ist. Sonst wäre ein paar zusätzliche .ToUpper hilfreich, um nach dem Prozessnamen zu suchen? – PeterCo

6

Sie können eine Schleife durch die laufenden Prozesse wie folgt aus:

For Each p As Process In Process.GetProcesses() 
    Debug.WriteLine(p.ProcessName) 
Next 
2

eine andere Art und Weise:

Dim psList() As Process 
    Try 
     psList = Process.GetProcesses() 

     For Each p As Process In psList 
      Console.WriteLine(p.Id.ToString() + " " + p.ProcessName) 
     Next p 

    Catch ex As Exception 
     Console.WriteLine(ex.Message) 
    End Try 
    Console.ReadKey() 
Verwandte Themen