静默运行控制台应用程序(禁止显示控制台窗口)

时间:2015-01-06 19:38:11

标签: c windows-7

我查看了这些针对类似问题的帖子: From Python Extract Silently Command Line Option

无解决我的具体问题。

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

enter image description here

但是,我需要从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提示窗口闪烁。

有没有办法在应用程序中运行7za.exe完全静默,也就是说,没有实例化shell命令窗口闪烁?

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

1 个答案:

答案 0 :(得分:2)

对于需要在运行默认启动shell的可执行程序时出现的抑制shell提示符的其他Windows程序员可能会有用:(感谢@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);