Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

Если вы не использовали метод 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"]);

Ответ 2

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

Ответ 3

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

Ответ 4

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