2015-07-21 3 views
0

Я создаю приложение WPF на C#, которое будет контролировать процессы, запущенные на машине. Я хочу иметь возможность собирать список запущенных процессов и сравнивать их со списком процессов, которые я хочу запустить. Если процесс, который я хочу запустить, еще не запущен, мое приложение запустит его.Дифференциация процессов с тем же именем за пределами моего приложения?

У меня возникли проблемы с получением процессов по имени, потому что у меня много процессов, запущенных из одного родительского приложения (все они начинаются с разных исполняемых параметров), поэтому все они имеют одинаковое имя процесса. Я также не могу использовать идентификатор процесса, потому что для меня нет способа узнать PID процессов, запущенных за пределами моего приложения. Мне нужно каким-то образом отличить процессы друг от друга как в моем приложении, так и вне его, чтобы я мог узнать, запущены ли они. Любая помощь приветствуется, спасибо.

+0

Вы проверили путь команды – BhavO

+2

Добро пожаловать в StackOverflow! Можете ли вы добавить код своей попытки до сих пор? – kdbanman

+1

Но вы можете прочитать их командную строку: http://stackoverflow.com/questions/504208/how-to-read-command-line-arguments-of-another-process-in-c/504378%23504378 – Tigran

ответ

0

Как предложено here, вы можете запросить параметры командной строки процесса с WMI, выполнив следующие действия, например, если у вас есть ProcessId:

var wmiQuery = string.Format("select CommandLine from Win32_Process where ProcessId='{0}'", processId); 
var searcher = new ManagementObjectSearcher(wmiQuery); 
var retObjectCollection = searcher.Get(); 
foreach (ManagementObject retObject in retObjectCollection) 
    Console.WriteLine("[{0}]", retObject["CommandLine"]); 

Вероятно, вы можете использовать аналогичный запрос для Win32_Process, чтобы найти все ProcessId с тем же именем процесса.

Смежные вопросы