gpt4 book ai didi

c++ - 为什么 createProcess() 中的 argv 与普通的 C++ 程序不同

转载 作者:行者123 更新时间:2023-11-28 02:06:41 25 4
gpt4 key购买 nike

这是我的代码,我发现第一个输出是“thisProgram.exe”第二个输出是“a”。

为什么?

我阅读了 msdn 中的文档,但是我不太清楚为什么 argv[0] 可以是“a”,使用 createProcess 时在 Windows 中有什么不同。有人可以告诉我 lpApplicationName 和 lpCommandline 的区别吗?谢谢

int main( int argc, char *argv[] ) {
cout << argv[0] << endl;

STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));

// Start the child process.
if (!CreateProcess("thisProgram.exe", // No module name (use command line)
"a b c", // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi) // Pointer to PROCESS_INFORMATION structure
) {
printf("CreateProcess failed (%d).\n", GetLastError());
return 1;
}

// Wait until child process exits.
WaitForSingleObject(pi.hProcess, INFINITE);

// Close process and thread handles.
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return 0;

最佳答案

CreateProcess 将第二个参数(命令行)作为其命令行传递给新进程。 CreateProcess 不会在模块名称前添加。如果您希望应用程序名称显示为 argv[0],您必须在命令行参数中重复应用程序名称。

documentation是这样说的:

If both lpApplicationName and lpCommandLine are non-NULL, the null-terminated string pointed to by lpApplicationName specifies the module to execute, and the null-terminated string pointed to by lpCommandLine specifies the command line. The new process can use GetCommandLine to retrieve the entire command line. Console processes written in C can use the argc and argv arguments to parse the command line. Because argv[0] is the module name, C programmers generally repeat the module name as the first token in the command line.

通常最简单的方法是为应用程序名称传递 NULL,并为命令行传递应用程序名称和连接在一起的参数。

关于c++ - 为什么 createProcess() 中的 argv 与普通的 C++ 程序不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37211638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com