Поделиться через


Функция GetCommandLineA (processenv.h)

Извлекает строку командной строки для текущего процесса.

Синтаксис

LPSTR GetCommandLineA();

Возвращаемое значение

Возвращаемое значение — это указатель на строку командной строки для текущего процесса.

Замечания

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

Консольные процессы могут использовать argc и аргументы argv основных или wmain, реализуя эти функции в качестве точки входа программы.

Процессы графического интерфейса могут использовать аргумент lpCmdLine функций WinMain или wWinMain путем реализации этих функций в качестве точки входа программы.

Чтобы преобразовать командную строку в массив стилей argv , передайте результат getCommandLineA в CommandLineToArgvW.

Заметка

Имя исполняемого файла в командной строке, которое операционная система предоставляет процессу, не обязательно совпадает с тем, что в командной строке, которая вызывает процесс предоставляет функции CreateProcessA. Операционная система может присвоить полный путь к имени исполняемого файла, предоставленному без полного пути.

Замечания по безопасности

Командная строка, возвращаемая GetCommandLineA, — это преобразование командной строки Юникода на 8-разрядную кодовую страницу процесса.

Для большинства кодовых страниц это преобразование является потерей, и преобразованная командная строка может отличаться от командной строки Юникода, создавая возможные проблемы безопасности, как показано ниже:

  • Преобразование может изменять строки, предназначенные для использования в качестве имен файлов. Например, если кодовая страница ANSI является Windows-1252, символ Юникода U+0100 (латинская буква A с макроном: Ā) преобразуется в 0x41 (латинская буква A). Если пользователь передает имя файла, содержащее символ Ā, программа, использующая GetCommandLineA, получит его с символом A и работать с неправильным файлом.
  • Преобразование может изменить способ синтаксического анализа командной строки. Например, если кодовая страница ANSI — Windows-1252, символ Юникода U+FF02 (кавычка Fullwidth: ") преобразуется в 0x22 (кавычка ASCII) и символ Юникода U+2010 (дефис: «-) преобразуется в 0x2D (знак минус ASCII). Оба из них могут привести к неправильному интерпретации аргументов файла командной строки в качестве параметров командной строки.

Чтобы избежать этой проблемы, используйте функцию GetCommandLineW для получения командной строки Юникода или используйте манифест приложения (в Windows версии 1903 или более поздней версии), чтобы задать UTF-8 в качестве страницы кода процесса.

Заметка

Заголовок processenv.h определяет GetCommandLine как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows XP [классические приложения | Приложения UWP]
минимальный поддерживаемый сервер Windows Server 2003 [классические приложения | Приложения UWP]
целевая платформа Виндоус
заголовка processenv.h (включая Windows.h в Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
библиотеки Kernel32.lib
DLL Kernel32.dll

См. также

функция CreateProcessA

функции процессов и потоков