2

我有我的主应用程序,从我的主应用程序我将调用另一个模块(第三方)在我的主应用程序中执行一个小操作,当我调用该模块时..它处理特定时间说 5 秒。而它的处理它在命令窗口中显示了一些信息的过程..现在我的主应用程序等到被调用的模块完成它的过程。现在我的问题是..如何隐藏这个命令窗口而不干扰它的过程..我尝试使用创建过程,但它似乎不起作用......

例如:我的主应用程序是父进程,被调用的应用程序是子进程..父进程应该独立于子进程..检查下面的示例

int main()
{
  execl("c:\\users\\rakesh\\Desktop\\calledapplication.exe","c:\\users\\rakesh\\Desktop    \\calledapplication.exe",0);


}

code in calledapplication
int main
{
  printf("Rakesh");
}

现在考虑上述情况,如果您运行第一个程序...输出将出现在同一个命令窗口中(不应该那样)...我希望主应用程序创建进程,但它不应该受到子进程的影响。

4

3 回答 3

4

传入参数。CREATE_NO_WINDOW_dwCreationFlagsCreateProcess

于 2010-03-10T05:08:06.940 回答
1

你谈到了一个“命令窗口”,所以我假设孩子是一个控制台应用程序。在这种情况下,您可以在单独的控制台中创建进程,并可选择强制新控制台图标化或隐藏。以下代码启动解释批处理文件 (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;
}
于 2010-03-10T09:31:39.387 回答
0

听起来您希望子进程的输出显示在单独的窗口中。如果是这样,您想调用CreateProcess并传递CREATE_NEW_CONSOLE标志,而不是使用exec*.

于 2010-03-10T06:38:08.240 回答