c++ - CreateProcess 不会使用参数启动进程

标签 c++ windows winapi createprocess

所以我使用这段代码来启动带有参数的控制台应用程序:

#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 运行它时,它没有显示任何内容。我检查了一下,在任务管理器中它似乎出现了,但仍然没有显示参数。我也试着写 cout << argv;在函数中 void StartProgram(char 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 作为第一个参数。实际上,这就是我通常使用它的方式。

关于c++ - CreateProcess 不会使用参数启动进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35070752/

相关文章:

c++ - 从 GUI 应用程序运行带有 CreateProcess 的 .bat 脚本会导致 "The filename, directory name, or volume label syntax is incorrect."错误

c++ - ListView 中嵌入的进度条

c++ - 相当于 C++ 中 vector 的 int[] + k

windows - 如何让程序使用虚拟内存?

python - 使用 MingW 在 Windows 上发布 PyGObject/GTK+ 应用程序

python - 从 Windows 上的交互式提示打印 Python 历史记录

c# - 在 windows xp 下检测刷新 Action

创建两个以上的 StatusBar 部件

c++ - 使用 Eigen header 的模板函数

c++ - 一种快速算法而不是排列