簡體   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