Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CreateProcess函数中存在问题!_C_Process_Multithreading_Createprocess - Fatal编程技术网

CreateProcess函数中存在问题!

CreateProcess函数中存在问题!,c,process,multithreading,createprocess,C,Process,Multithreading,Createprocess,我有我的主应用程序,从我的主应用程序我将调用另一个 模块第三方在我的主应用程序中执行一个小操作,当我调用该模块时,它会处理一个特定的时间,比如说5秒。在处理过程中,它会在commmand窗口中显示进程以及一些信息。现在我的主应用程序会等待被调用的模块完成其进程。现在我的问题是..如何在不干扰其进程的情况下隐藏此命令窗口..我尝试使用createprocess,但它似乎不起作用 例如:我的主应用程序是父进程,而被调用的应用程序是子进程。父进程应该独立于子进程。请检查下面的示例 int main()

我有我的主应用程序,从我的主应用程序我将调用另一个 模块第三方在我的主应用程序中执行一个小操作,当我调用该模块时,它会处理一个特定的时间,比如说5秒。在处理过程中,它会在commmand窗口中显示进程以及一些信息。现在我的主应用程序会等待被调用的模块完成其进程。现在我的问题是..如何在不干扰其进程的情况下隐藏此命令窗口..我尝试使用createprocess,但它似乎不起作用

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

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


}

code in calledapplication
int main
{
  printf("Rakesh");
}
现在考虑上述情况,如果运行第一个程序,输出将以相同的格式出现
命令窗口不应该是这样的…我希望主应用程序创建进程,但它不应该受子进程的影响。

在CreateProcess的dwCreationFlags参数中传递create\u NO\u窗口。

听起来您希望子进程的输出显示在单独的窗口中。如果是这样,您希望调用CreateProcess并将CREATE_NEW_CONSOLE标志传递给它,而不是使用exec*。 在这种情况下,您可以在单独的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;
}

@Rakesh-没有为进程显示控制台窗口与以某种方式强制程序无法显示其编程要显示的消息框是完全不同的请求。你应该在问题中明确你想做什么,这样人们就不会猜测或解决错误的问题我尝试了很多方法和示例来隐藏我闪烁的cmd.exe窗口我使用参数运行cmd,目前打开了12个浏览器选项卡,只有关于ShellExecute的stackoverflow页面,ShellExecuteEx和CreateProcess。似乎没有什么对我有用,我害怕为它发帖,因为已经有太多的东西要读了。但为了我的健康,我还是不得不扔掉它。这是我第二天的尝试,但我的希望即将结束。我从来没有想到过隐藏一个CMDE EXE窗口的一些简单的参数,这对C++来说是一件很痛苦的事情……我的示例代码在你的环境中工作吗?比如说,在MyTest.BAT中只有@回音?顺便问一下,你使用的是什么系统/架构?嗨,朱塞佩:谢谢你花时间回复我。我的工作环境是Windows 10 x64-实际上我没有使用该代码来调用/exec external.bat,而是在使用参数调用cmd.exe窗口时隐藏它:。但是,即使使用ShellExecuteEx,我也无法隐藏闪烁的窗口。我知道还有其他方法/解决办法,即VBS Windows脚本主机,但我真的想用C++来做这件事。不幸的是,StackOverflow或任何其他网站上发布的答案/解决方案中没有一个在这方面对我有所帮助:-在您第20行的示例中,有memset&si,0,sizeofpi;,这将清除si中的设置。我想您应该已经编写了memset&pi,0,sizeofpi;。嗯,你是第一个注意到/提到它的人。显然,我认为C++的文盲的缺点还不止这些。