我查看了这些针对类似问题的帖子: From Python 和 Extract Silently 和 Command Line Option
无解决我的具体问题。
我想在用ANSI C 编写的应用程序中调用7za.exe(可能还有其他 console 应用程序,默认情况下会导致shell命令窗口)没有shell提示窗口弹出每个调用。在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提示窗口闪烁。
有没有办法在应用程序中运行7za.exe
完全静默,也就是说,没有实例化shell命令窗口闪烁?
如果使用7za无法做到这一点,我也很乐意听到其他方法。
答案 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);