Как прочитать аргументы командной строки другого процесса в C #? - PullRequest
29 голосов
/ 02 февраля 2009

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

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

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

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

Ответы [ 4 ]

55 голосов
/ 02 февраля 2009

Если вы не использовали метод 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"]);
5 голосов
/ 02 февраля 2009

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

1 голос
/ 02 февраля 2009

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

0 голосов
/ 02 февраля 2009

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

...