首页 文章

CreateProcess函数中的问题!

提问于
浏览
2

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

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

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


}

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

现在考虑以上如果你运行第一个程序...输出将出现在同一个命令窗口(它不应该是这样)...我希望主应用程序创建进程,但它不应该受子进程的影响 .

3 回答

  • 4

    CreateProcessdwCreationFlags 参数中传递 CREATE_NO_WINDOW .

  • 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;
    }
    
  • 0

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

相关问题