2012-06-15 6 views
8

Я пытаюсь выяснить, запущен ли экземпляр приложения (а не vb.net), потому что я хочу его запустить, но я не хочу его запускать, если он уже запущен. Я нашел решение, чтобы проверить, если процесс выполняется:Как получить список имен процессов в VB.NET?

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

и вернуть истину, если> = 1 (или просто номер процесса).

Моя проблема заключается в том, что это приложение стороннего производителя, и его имя процесса - это не просто имя, но оно содержит номер версии (который, возможно, не знаю во время выполнения), и он также добавляет * 32 (возможно, возможно, * 64, если он установлен в x64?).

Мне нужно получить список запущенных процессов, по имени и тесту, если «имя процесса» является подстрокой имени. Но мне не удалось получить список имен, только идентификатор процесса.

ответ

7

Мне нужно, чтобы получить список запущенных процессов, по имени, и если тест «ProcessName» подстрока имени.

Вы могли бы использовать:

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

Это будет выглядеть через все процессы, и установите значение procExists Истину, если любой процесс, который содержит processName существует в настоящее время выполняющихся процессов. Это должно привести к существованию неизвестного номера версии, а также *32, которые могут возникнуть, если вы работаете на 64-битной ОС (это флаг WOW64, говорящий, что это 32-разрядный процесс на 64-битной ОС).

+0

Я попытался это, но "любой" не работает. Спасибо, что объяснили * 32. – Thalia

+0

@emptyheaded Просто добавьте «Import System.Linq» в верхней части файла, и Any должен работать. Это метод расширения LINQ (http://msdn.microsoft.com/en-us/library/bb534972.aspx) –

+1

@Reed Copsey: Не должно быть «p.ProcessName.Contains» вместо p.Name.Contains? И я не уверен, что. Любой случай чувствителен. Иначе какой-нибудь дополнительный .ToUpper был бы полезен для поиска имени процесса? – PeterCo

6

Вы можете перебрать запущенных процессов, как это:

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

другой способ:

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() 
Смежные вопросы