问题CreateProcess函数!
-
19-09-2019 - |
题
我有我的主要应用,从我的主要应用程序,我将调用另一个 模块(第三方)在我的主要应用程序进行小手术,当我打电话说module..it过程特定时间说5 sec.while其等待处理它显示了条命令窗口中的过程与一些information..now我主要应用程序等待,直到被叫模块完成其process.Now我的问题is..how做我隐藏该命令窗口,不干扰其process..I试图用CreateProcess的,但它似乎没有工作...
例如:我的主要应用是父进程和被叫应用是子process..Parent过程应该独立于儿童的process..check以下
我的例子int main()
{
execl("c:\\users\\rakesh\\Desktop\\calledapplication.exe","c:\\users\\rakesh\\Desktop \\calledapplication.exe",0);
}
code in calledapplication
int main
{
printf("Rakesh");
}
现在考虑以上,如果你运行的第一个程序...输出将出现在同 命令窗口(它不应该是这样的)......我想主要的应用程序创建的过程,但它不应该由子进程的影响。
解决方案
通CREATE_NO_WINDOW
在dwCreationFlags
的CreateProcess
参数。
其他提示
您谈到了一个“命令窗口”,所以我相信,孩子是一个控制台应用程序。 在这种情况下,你可以在一个单独的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;
}
这听起来像你希望子进程的输出到一个单独的窗口中显示出来。如果是这样,你要调用CreateProcess
,并将它传递的CREATE_NEW_CONSOLE
标志,而不是使用exec*
。
不隶属于 StackOverflow