У меня есть метод, который возвращает список процессов с помощью WMI. Если у меня есть 3 выполнения процессов (все из которых являются приложениями C#) - и у них всех есть ТО ЖЕ ИМЯ ПРОЦЕССА, но различные параметры командной строки, как может, я дифференцируюсь между ними, Если я хочу запустить их или завершить их!?
Насколько я вижу, я физически не могу дифференцироваться между ними, по крайней мере, не имея необходимость использовать Дескриптор, но это не говорит мне, какой из них был завершен, потому что другие будут все еще сидеть там с тем же именем........
.... действительно озадаченный, справка значительно ценится!
WMI Win32_ProcessObject имеет свойство CommandLine , которое вы могли бы использовать, если это то, что вы знаете, отличает экземпляры.
string query = “Select * From Win32_Process Where Name = “ + processName;
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection processList = searcher.Get();
foreach (ManagementObject obj in processList)
{
string cmdLine = obj.GetPropertyValue("CommandLine").ToString();
if (cmdLine == "target command line options")
{
// do work
}
}
Создайте процесс, используя метод, который дает вам идентификатор процесса в качестве выходного параметра. Например.
[out] uint32 ProcessId
Затем вы можете использовать это значение, чтобы точно знать, какую версию процесса вы хотите убить позже. Например.
(обратите внимание, что если процесс останавливается до того, как вы его уничтожите, ОС может назначить тот же идентификатор процесса новому процессу, поэтому, конечно, вы захотите дважды проверить, что вы убиваете правильный, например, проверьте также имя процесса)