CreateProcess 不会使用参数启动进程
CreateProcess won't start the proccess with arguments
所以我使用这段代码来启动带有参数的控制台应用程序:
#include <iostream>
#include <windows.h>
using namespace std;
void StartProgram(char argv[])
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
CreateProcess
(
TEXT("PlayerDebug.exe"),
(LPSTR)argv,
NULL,NULL,FALSE,
CREATE_NEW_PROCESS_GROUP | CREATE_NO_WINDOW,
NULL,NULL,
&si, &pi
);
};
int main()
{
StartProgram("sound.wav");
return 0;
}
"PlayerDebug.exe" 显示用于调用它的参数。但是当我按照我展示的方式使用 CreateProcess 运行 它时,它没有显示任何内容。我检查了一下,在任务管理器中它似乎出现了,但仍然没有显示参数。我还尝试在函数 void StartProgram(char argv[])
中编写 cout << argv;
,它返回了“sound.wav
”,这是正确的。但似乎参数没有传递给 PlayerDebug.exe,我不知道为什么。
我做错了什么?
(我是 C++ 编程新手)
CreateProcess 的第二个参数是完整的命令行,而不仅仅是 EXE 的参数。让我们举两个例子:
CreateProcess ("c:\notepad.exe",
"c:\notepad.exe c:\wibble.txt",
...);
可以正常工作(如果 C: 的根目录中有 notepad.exe 的副本和名为 wibble.txt 的文件),而
CreateProcess ("c:\notepad.exe",
"c:\wibble.txt",
...);
将启动 EXE 但无法打开文件。这意味着当帮助系统调用命令行的第二个参数时,它没有说谎 - 它需要整个命令行。
请注意,如果整个命令行都在第二个参数中,则可以使用 NULL 作为第一个参数。事实上,我通常就是这样使用它的。
所以我使用这段代码来启动带有参数的控制台应用程序:
#include <iostream>
#include <windows.h>
using namespace std;
void StartProgram(char argv[])
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
CreateProcess
(
TEXT("PlayerDebug.exe"),
(LPSTR)argv,
NULL,NULL,FALSE,
CREATE_NEW_PROCESS_GROUP | CREATE_NO_WINDOW,
NULL,NULL,
&si, &pi
);
};
int main()
{
StartProgram("sound.wav");
return 0;
}
"PlayerDebug.exe" 显示用于调用它的参数。但是当我按照我展示的方式使用 CreateProcess 运行 它时,它没有显示任何内容。我检查了一下,在任务管理器中它似乎出现了,但仍然没有显示参数。我还尝试在函数 void StartProgram(char argv[])
中编写 cout << argv;
,它返回了“sound.wav
”,这是正确的。但似乎参数没有传递给 PlayerDebug.exe,我不知道为什么。
我做错了什么?
(我是 C++ 编程新手)
CreateProcess 的第二个参数是完整的命令行,而不仅仅是 EXE 的参数。让我们举两个例子:
CreateProcess ("c:\notepad.exe",
"c:\notepad.exe c:\wibble.txt",
...);
可以正常工作(如果 C: 的根目录中有 notepad.exe 的副本和名为 wibble.txt 的文件),而
CreateProcess ("c:\notepad.exe",
"c:\wibble.txt",
...);
将启动 EXE 但无法打开文件。这意味着当帮助系统调用命令行的第二个参数时,它没有说谎 - 它需要整个命令行。
请注意,如果整个命令行都在第二个参数中,则可以使用 NULL 作为第一个参数。事实上,我通常就是这样使用它的。