繁体   English   中英

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

[英]How to run another external console program from a console program?

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

这是两个控制台程序。 (我制作到 Visual Studio 2017 C++)

第一个程序名称是“A”,第二个程序名称是“B”。 程序 A 和 B 都是控制台程序。

  1. 程序“A”检查程序“B”是否正常运行。
  2. 如果程序“B”终止,程序“B”被程序“A”强制执行。

我在编号 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;
}`

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

CREATE_NEW_CONSOLE似乎是您正在寻找的。

CREATE_NEW_CONSOLE:新进程有一个新的控制台,而不是继承其父级的控制台(默认)。

像这样的一个例子:

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

我不确定如何在 Windows 上做到这一点。

但也许您可以以某种方式将此解决方案应用于 Windows。

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

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

如果有人知道此方法是否适用于 Windows,他们可能会同意或不同意我的看法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM