Как прочитать аргументы командной строки другого процесса в C#?

Как я могу получить аргументы командной строки другого процесса?

использование статических функций System.Diagnostics.Process class I может получить список запущенных процессов, например, по имени:

Process[] processList = Process.GetProcessesByName(processName);

однако, нет никакого способа получить доступ к командной строке, используемой для запуска этого процесса. Как это сделать?

4 ответов


Если вы не использовали метод Start для запуска процесса, свойство StartInfo не отражает параметры, используемые для запуска процесса. Например, если GetProcesses используется для получения массива процессов, запущенных на компьютере, свойство StartInfo каждого процесса не содержит исходного имени файла или аргументов, используемых для запуска процесса. (источник: MSDN)

предложение WMI Стюарта является хорошим:

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

Если вы ориентируетесь на Windows XP или более поздней версии, и вы можете позволить себе накладные расходы WMI, возможность будет искать целевой процесс с помощью WMI именем Win32_Process класс, который имеет свойство CommandLine.


Process.StartInfo возвращает ProcessStartInfo объект, который якобы, но не обязательно имеет аргументы в свойстве Arguments.


ваши проекты? Не могли бы вы изменить источник для процесса, который вы пытаетесь исследовать, чтобы он дал вам свои аргументы командной строки, а не пытался прочитать их откуда-то вне этого процесса?