我有我的主要应用程序,从我的主应用程序我将调用另一个 模块(第三方)在我的主应用程序中执行一个小操作,当我调用该模块时...特定时间的进程说5秒。而它处理它会在命令窗口中显示一些信息的进程..现在我的主应用程序等待,直到被调用的模块完成其进程。现在我的问题是...如何操作我隐藏这个命令窗口而不打扰它的进程..我试图使用createprocess但它似乎不起作用...
例如:我的主应用程序是父进程,被调用的应用程序是子进程。父进程应独立于子进程。检查下面的示例
int main()
{
execl("c:\\users\\rakesh\\Desktop\\calledapplication.exe","c:\\users\\rakesh\\Desktop \\calledapplication.exe",0);
}
code in calledapplication
int main
{
printf("Rakesh");
}
现在考虑以上情况,如果你运行第一个程序...输出会出现在同一个 命令窗口(它应该是这样的)...我希望主应用程序创建进程,但它不应受子进程的影响。
答案 0 :(得分:4)
在CREATE_NO_WINDOW
的{{1}}参数中传递dwCreationFlags
。
答案 1 :(得分:1)
你谈到了一个“命令窗口”,所以我假设孩子是一个控制台应用程序。 在这种情况下,您可以在单独的conole中创建进程,并可选择强制新控制台进行图标化或隐藏。 以下代码启动一个解释批处理文件(mytest.bat)的子进程。 我希望它可以提供帮助。问候。
#include <windows.h>
#include <stdio.h>
int main(int argc, char **argv)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
BOOL rv = FALSE;
WCHAR cmdline[] = TEXT("cmd.exe /c mytest.bat");
memset(&si,0,sizeof(si));
si.cb = sizeof(si);
// Add this if you want to hide or minimize the console
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE; //or SW_MINIMIZE
///////////////////////////////////////////////////////
memset(&pi,0,sizeof(pi));
rv = CreateProcess(NULL, cmdline, NULL, NULL,
FALSE, CREATE_NEW_CONSOLE,
NULL, NULL, &si, &pi);
if (rv) {
WaitForSingleObject(pi.hProcess, INFINITE);
printf("Done! :)\n");
}
else {
printf("Failed :(\n");
}
return rv ? 0 : 1;
}
答案 2 :(得分:0)
听起来您希望子进程的输出显示在单独的窗口中。如果是,您需要致电CreateProcess
并将CREATE_NEW_CONSOLE
标记传递给它,而不是使用exec*
。