运行 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);
我看过这些解决类似问题的帖子: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);