Я уже искал здесь ответ, но не смог найти ни фрагментов, ни рабочих кодов.
Как мне получить ProcessIds с заданной CommandLine? Я уже получил CommandLine от Pid с этим методом:
private IEnumerable<string> GetCommandLine(Process process)
{
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT CommandLine FROM Win32_Process WHERE ProcessId = " + process.Id))
using (ManagementObjectCollection objects = searcher.Get())
{
foreach (var element in objects)
yield return element["CommandLine"]?.ToString();
}
}
Это работает для получения CommandLine с заданным ProcessId.
Но я хочу ProcessId с данной CommandLine.
Я запустил процесс, который будет иметь эту Командную линию, которую я ищу.
Это моя попытка:
private IEnumerable<int> GetIdsByCommandLine(string commandLine)
{
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT ProcessID FROM Win32_Process WHERE CommandLine = " + commandLine))
using (ManagementObjectCollection objects = searcher.Get())
{
foreach (var element in objects)
yield return (int) element["ProcessId"];
}
}
Но если я запускаю это, оно останавливается в начале цикла foreach: «Запрос недействителен»
Кто-нибудь может мне помочь с таким запросом, чтобы получить ProcessId по CommandLine?
Заранее спасибо!
Edit:
Мне это нужно для контроля над процессом. У меня есть 4 программы, которые запускаются с аргументами. Но не должно быть никаких экземпляров этих программ до их запуска. Поэтому я пытаюсь запустить каждый из них, получить CommandLine (GetCommandLine выше) процесса, убить процесс, а затем я хочу найти процессы с той же CommandLine, чтобы убить их. Только когда это будет сделано, я смогу запустить свои 4 программы без суеты. Вот почему мне нужен именно способ извлечения идентификаторов процессов с помощью CommandLine.