Получение исходной (нераспределенной) командной строки в .NET. - программирование
Подтвердить что ты не робот

Получение исходной (нераспределенной) командной строки в .NET.

В .NET мы можем легко получить доступ к аргументам командной строки разделения в массиве строк из аргумента Main(string[]) или Environment.GetCommandLineArgs(). Тем не менее, есть ли способ получить непараметрированную командную строку как одну строку?

Фон: мое приложение добавляет себя в контекстное меню FileExplorer (например, Notepad ++). Когда он запускается таким образом, имя файла передается без кавычек, а это означает, что если в пути есть пробелы, он разбивается. Я знаю, что могу исправить это, включив %1 в кавычки в реестре, например myapp.exe "%1", но когда я проверяю другой реестр приложений, они этого не делают. Они равны как notepad.exe %1 - они получили полную командную строку. Я хочу знать, возможно ли это в .NET и как.

4b9b3361

Ответ 1

Попробуйте использовать Environment.CommandLine

Ответ 2

Try:

Environment.CommandLine

Это лучше сделать до 30 символов.

Ответ 3

Чтобы получить необработанную, необработанную, немодифицированную командную строку, вы должны P/Invoke GetCommandLine из kernel32. Операционная система будет иметь синтаксический анализ. Например, перенаправление ввода-вывода, такое как >foo.txt, будет исключено из текста командной строки независимо от используемой техники.

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

Например, для командной строки:

test.exe this is "a test"

Environment.CommandLine равно: "this is a test"

Но GetCommandLine дает: "test.exe this is "a test"", где пробелы и кавычки нетронуты, а также путь EXE.

Примечание, что при использовании этого метода вам необходимо вручную разобрать текст в командной строке, что может привести к отключению пути к exe, который сам может быть заключен в кавычки, если путь содержит пробелы.