GetCommandLineA 函数 (processenv.h)

检索当前进程的命令行字符串。

语法

LPSTR GetCommandLineA();

返回值

返回值是指向当前进程的命令行字符串的指针。

言论

返回值的生存期由系统管理,应用程序不应释放或修改此值。

控制台进程可以通过将 argc 作为程序入口点来实现这些函数,来使用主 或 wmain 函数的 argcargv 参数。

GUI 进程可以通过将这些函数实现为程序入口点,使用 WinMain 或 wWinMain 函数的 lpCmdLine 参数。

若要将命令行转换为字符串 argv 样式数组,请将 GetCommandLineA 的结果传递给 CommandLineToArgvW

注意

操作系统提供给进程的命令行中的可执行文件名称不一定与调用进程提供给 CreateProcessA 函数命令行中的可执行文件名称相同。 操作系统可能会将完全限定的路径追加到未提供完全限定路径的可执行名称。

安全备注

GetCommandLineA 返回的命令行是 Unicode 命令行到 8 位进程代码页的转换。

对于大多数代码页,此转换是丢失的,转换后的命令行可能与 Unicode 命令行不同,因此可能会产生如下安全问题:

  • 转换可能会更改用作文件名的字符串。 例如,如果 ANSI 代码页是 Windows-1252,则 Unicode 字符 U+0100(带宏号:Ā 的拉丁文大写字母 A)转换为0x41(拉丁文大写字母 A)。 如果用户传递包含字符 Ā 的文件名,则使用 GetCommandLineA 的程序将收到包含字符 A 的文件名,并针对错误的文件进行操作。
  • 转换可能会改变命令行分析方式。 例如,如果 ANSI 代码页是 Windows-1252,则 Unicode 字符 U+FF02(全形引号:“)转换为0x22(ASCII 引号)和 Unicode 字符 U+2010(连字符: ?)转换为0x2D(ASCII 减号)。 这两者都可能导致命令行文件参数被误解释为命令行选项。

若要避免此问题,请使用 GetCommandLineW 函数接收 Unicode 命令行,或使用应用程序清单(在 Windows 版本 1903 或更高版本上)将 UTF-8 设置为进程代码页

注意

processenv.h 标头将 GetCommandLine 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非中性编码别名与非非编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 Windows XP [桌面应用 |UWP 应用]
支持的最低服务器 Windows Server 2003 [桌面应用 |UWP 应用]
目标平台 窗户
标头 processenv.h (包括 Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2 上的 Windows.h)
Kernel32.lib
DLL Kernel32.dll

另请参阅

CreateProcessA 函数

进程和线程函数