Можно ли получить командную строку _raw _ / _ unprocessed_? - PullRequest
0 голосов
/ 28 апреля 2019

Windows API предоставляет GetCommandLine (), который возвращает готовую командную строку, использованную для запуска процесса.

Например, если консольное приложение запускается с помощью команды:

MyProg.exe> ​​OutputHere

Командная строка, видимая MyProg.exe, будет не включать часть

> OutputHere

Я бы хотел как-то получить командную строку точно такой, какой она была. Возможно ли это? и если да, то как?

Предложения на языке C и / или на простом языке (без объектов). Приветствуются творческие решения (надеюсь, код не требует кода 0).

Большое спасибо за вашу помощь.

ПРИМЕЧАНИЕ: Я могу сказать, был ли перенаправлен ввод / вывод и т. Д., Но это не то, что я ищу. Мне нужна оригинальная / сырая командная строка.

Ответы [ 2 ]

2 голосов
/ 28 апреля 2019

Перенаправление или конвейеризация stdin, stdout и stderr обрабатывается интерпретатором команд, обычно cmd.exe. Интерпретатор анализирует команду и создает необходимые файлы и каналы, а затем создает один или несколько процессов, необходимых для реализации вашей команды.

Созданные процессы не знают исходную команду, они получают только ту часть команды, которая не связана с конвейерной передачей и перенаправлением.

Итак, то, что вы пытаетесь сделать, невозможно, по крайней мере, в рамках вашего процесса. Единственная вещь, которая знает оригинальную команду - это интерпретатор команд.

1 голос
/ 04 мая 2019

Возможность получения полной командной строки, включая команды конвейера, зависит от того, запускаете ли вы программу в командном окне или, например, с помощью команды «Выполнить» из меню «Пуск».Если вы используете команду «Выполнить» из меню «Пуск», GetCommandLine фактически извлекает полную командную строку, включая команды перенаправления, но перенаправление не работает, так как это кажется функцией CMD.EXE.

Какдругие указали, что вы пытаетесь достичь здесь / почему вам нужно захватить команды перенаправления?

...