Перехват параметров командной строки из кода C # - PullRequest
2 голосов
/ 31 августа 2010

Предположим, я набрал excel.exe /r "c:\book1.xlsx" в Окно запуска .

Как я буду trap the switch(/r) and the parameter "c:\book1.xlsx" from my C# code?

Спасибо

Ответы [ 2 ]

4 голосов
/ 31 августа 2010

Если ваш код работает в процессе (в excel.exe)

Командную строку можно получить с помощью свойства Environment.CommandLine. Обратите внимание, что процесс может изменить свою собственную командную строку (в конце концов, это всего лишь несколько байтов в памяти), но это не часто делается.

Если ваш код работает вне процесса (рекомендуется вариант 1)

Вы можете использовать WMI для получения аргументов командной строки другого процесса. Смотрите здесь . Вам нужно будет добавить ссылку на System.Management.dll. Например:

string query = string.Format("SELECT CommandLine FROM Win32_Process WHERE Name='{0}'", "excel.exe");

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
{
    foreach (ManagementObject process in searcher.Get())
    {
        Console.WriteLine(process["CommandLine"]);
    }
}

При этом будут напечатаны командные строки всех запущенных экземпляров excel.exe. Вы также можете выполнить запрос по идентификатору процесса, используя параметр ProcessId вместо параметра Name в запросе.

Если ваш код работает вне процесса (вариант 2, хитрее)

Вы также можете получить командную строку удаленного процесса, используя NtQueryInformationProcess и ReadProcessMemory для чтения в блоке среды процесса (PEB), чтобы получить _RTL_USER_PROCESS_PARAMETERS, который содержит команду -линия. Однако ничего из этого не задокументировано, что означает, что оно не поддерживается и может быть изменено. Детали этого описаны здесь .

0 голосов
/ 31 августа 2010

Параметры командной строки без параметров

Пример: yourExecutable.exe параметр1 параметр2 параметр3

См .: http://msdn.microsoft.com/en-us/library/aa288457%28VS.71%29.aspx

Параметры командной строки с опциями - Стандартные парсеры не доступны. Вам либо нужно написать свое, либо брать

Пример: yourExecutable.exe -f fileName --create

См .: http://www.codeproject.com/KB/recipes/command_line.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...