Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.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
C++ 如何从控制台程序运行另一个外部控制台程序?_C++_Winapi - Fatal编程技术网

C++ 如何从控制台程序运行另一个外部控制台程序?

C++ 如何从控制台程序运行另一个外部控制台程序?,c++,winapi,C++,Winapi,堆栈溢出用户您好! 我在制作程序时遇到问题,我问了一个问题 这里有两个控制台程序。(我制作Visual Studio 2017 C++)< /P> 第一个程序名是“A”, 第二个程序名是“B”。 程序A和B都是控制台程序。 程序“A”检查程序“B”是否正常运行 如果程序“B”终止,则程序“A”强制执行程序“B” 我在2号有个问题。。 程序“B”必须作为独立于程序“A”的外部程序运行。 但现在,程序“B”在程序“A”控制台提示符中运行 请告诉我如何作为一个单独的程序运行。。 Thx 我的代码是:

堆栈溢出用户您好! 我在制作程序时遇到问题,我问了一个问题

这里有两个控制台程序。(我制作Visual Studio 2017 C++)< /P> 第一个程序名是“A”, 第二个程序名是“B”。 程序A和B都是控制台程序。

  • 程序“A”检查程序“B”是否正常运行
  • 如果程序“B”终止,则程序“A”强制执行程序“B”
  • 我在2号有个问题。。 程序“B”必须作为独立于程序“A”的外部程序运行。 但现在,程序“B”在程序“A”控制台提示符中运行

    请告诉我如何作为一个单独的程序运行。。 Thx

    我的代码是:

    int main()   //Program A
    {
        STARTUPINFO si = { sizeof(si) };
        PROCESS_INFORMATION pi;
        
        ShowWindow(::GetConsoleWindow(), SW_SHOW);
    
        while (true)
        {
            if (CheckRef == true)
            {
                //ShowWindow(::GetConsoleWindow(), SW_HIDE);
                std::cout << "  " << getStateProcess(ProcessName) << std::endl;
                
                if (getStateProcess(ProcessName) == 0)  // Check to Program "B" is Running?
                {
                    // Program "B" is not Running. Started Program "B"
                    CreateProcess(NULL, (LPSTR)ProcessPath, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
                    Sleep(10);
                }
            }
            else
            {
                ShowWindow(::GetConsoleWindow(), SW_SHOW);
                system("cls");
                std::cout << "Start Ref Settring. . ." << std::endl;
                SetRef();
            }
            Sleep(500);
        }
        
        return 0;
    }`
    
    int main()//程序A
    {
    STARTUPINFO si={sizeof(si)};
    处理信息;
    ShowWindow(::GetConsoleWindow(),SW_SHOW);
    while(true)
    {
    如果(CheckRef==true)
    {
    //ShowWindow(::GetConsoleWindow(),SW_HIDE);
    
    std::cout我不能百分之百确定如何在Windows上实现它

    但也许你可以把这个解决方案应用到Windows上

    在Linux上,您可以从程序内部运行bash命令,这些程序也可以从启动它们的终端分离,然后在启动程序的用户下运行

    现在您可以让程序B检查,如果A没有运行,那么您可以通过调用系统终端来启动程序A。 也许是地狱


    如果有人知道这种方法是否适用于Windows,他们可能会反对或不同意我的意见。

    我不能百分之百确定如何在Windows上做到这一点

    但也许你可以把这个解决方案应用到Windows上

    在Linux上,您可以从程序内部运行bash命令,这些程序也可以从启动它们的终端分离,然后在启动程序的用户下运行

    现在您可以让程序B检查,如果A没有运行,那么您可以通过调用系统终端来启动程序A。 也许是地狱

    如果有人知道这种方法是否适用于Windows,他们可能会反对或不同意我的意见

    我在第2部分遇到问题。程序“B”必须作为外部程序运行 程序与程序“A”分开。但现在,程序“B”在中运行 编程“A”控制台提示

    似乎是你要找的

    创建新控制台:新进程有一个新控制台,而不是 继承其父控制台(默认)

    例如:

    CreateProcess(NULL, (LPSTR)ProcessPath, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
    
    我在第2部分遇到问题。程序“B”必须作为外部程序运行 程序与程序“A”分开。但现在,程序“B”在中运行 编程“A”控制台提示

    似乎是你要找的

    创建新控制台:新进程有一个新控制台,而不是 继承其父控制台(默认)

    例如:

    CreateProcess(NULL, (LPSTR)ProcessPath, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
    

    感谢您这样留下答案!但是,。它失败了。如果我还运行Windows Powershell,它将在程序A控制台提示中运行。。。。。)也许这会有帮助。感谢您这样留下答案!但是,。它失败了。如果我还运行Windows Powershell,它将在程序A控制台提示中运行。。。。。。。。。。。如果答案有帮助,这可能会对你好Noonsom有所帮助s你可以解决问题。你的确认将帮助其他人搜索类似问题。你好,Noonsom,如果答案帮助你解决问题,你可以。你的确认将帮助其他人搜索类似问题。