运行 Windows 控制台应用静默(禁止控制台出现)

Running Windows console app silently (suppress console from appearing)

我看过这些解决类似问题的帖子:From Python and Extract Silently and Command Line Option

None 解决了我的具体问题。

我想调用 7za.exe(可能还有其他 console 应用程序,默认情况下会导致 shell 命令 window)来自用 ANSI C 编写的 应用程序,每次调用都不会弹出 shell 提示符 window。在 Windows 命令 shell 中,我可以将 > nul 附加到 7za 命令行调用的末尾,它会抑制所有内容,如下所示:

但是,我需要从 Windows 应用程序循环调用它(数百次),导致持续闪烁,因为 Windows 启动 shell 然后终止命令完成时。

到目前为止,我已经尝试附加 > nul,正如我在上面的命令提示符图像中所示,然后使用 system() 命令,以及修改后的系统命令,该命令在另一个系统中启动 exe进程:

sprintf(command, "7za.exe x -y -o%s %s > nul", filepathUnComp, filepath); 
system(command);  

或:

SystemX(command);  

其中 SystemX 定义:

int SystemX(command)
{
    STARTUPINFO sj;
    PROCESS_INFORMATION pj;
    int exit;

    ZeroMemory( &sj, sizeof(sj) );
    sj.cb = sizeof(sj);
    ZeroMemory( &pj, sizeof(pj) );

    if(CreateProcess(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &sj, &pj) == 0)
    {
        //AED_GetErrorMessage(AEDNV_FAILED_CREATE_PROCESS,cmd);
        return -1;
    }

    // Wait until child processes exit.
    WaitForSingleObject( pj.hProcess, IGNORE ); //ingnore signal

    //Get exit code
    GetExitCodeProcess(pj.hProcess, (LPDWORD)(&exit));

    return exit;
}  

这两种方法导致shell提示window闪烁

有没有办法让运行7za.exe应用程序内完全无声,即不实例化shell命令window闪烁?

如果使用 7za 无法做到这一点,我也愿意听取其他方法。

这可能对其他 Windows 程序员有用,他们需要在 运行 默认启动 shell 的可执行程序时抑制 shell 提示的出现: (感谢@Marc B 和@Joachim Pileborg)

更改 OP SystemX 代码中的原始行:

 if(CreateProcess(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &sj, &pj) == 0);  

至:

 if(CreateProcess(NULL, cmd, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &sj, &pj) == 0);