C ++在程序中运行程序,两次

时间:2015-09-07 20:28:51

标签: c++ windows cmd

我正在尝试开发一个系统,允许我编译一个可以运行我制作的其他程序的.exe。现在,它可以,但它只能运行一次外部程序。一切都在一个cmd窗口中运行。我键入一个命令,它执行操作(运行单独的.exe)然后等待第二个操作。

我会尽量简化我正在做的事情。

正在运行.exe。让我们称之为TheCauser.exe

TABLE 2

要从上面的代码运行.exe。让我们称之为DoMe.exe

int main()
{
.
.
.
if(stuff is met)
                {
                    .
                    .
                    .
                    system(foundtextchar);//Windows run program
                    cout << endl;
                }
}

绝对基本。虽然事情运行顺利,但我只能运行DoMe.exe并将材质显示在cmd窗口上一次。的种类。我在TheCauser.exe中有一个小通知告诉我DoMe.exe何时运行。当我第二次运行DoMe.exe通知时,但没有来自DoMe.exe的材料。我的假设是,一旦DoMe.exe第一次运行,它就永远不会关闭但只是继续运行。

我觉得同样重要的是,如果我想要运行第二个程序,我们可以调用它,HeyListen.exe,如果DoMe.exe之前运行,HeyListen.exe将不显示它的材料但是会弹出通知说它正在运行。 HeyListen.exe的构建方式与DoMe.exe相同。

我觉得好像我的问题出现在DoMe.exe中,因为它并没有像我希望的那样结束它的进程。它是否正确?我怎么能让这个工作?

我想发布cmd窗口的图片以帮助提供视觉效果,但显然我没有足够的声誉。抱歉。

1 个答案:

答案 0 :(得分:1)

使用CreateProcess()生成程序。 (https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425%28v=vs.85%29.aspx

示例(来自MSDN

#include <windows.h>
#include <stdio.h>
#include <tchar.h>

void _tmain( int argc, TCHAR *argv[] )
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );

    if( argc != 2 )
    {
        printf("Usage: %s [cmdline]\n", argv[0]);
        return;
    }

    // Start the child process. 
    if( !CreateProcess( NULL,   // No module name (use command line)
        argv[1],        // Command line
        NULL,           // Process handle not inheritable
        NULL,           // Thread handle not inheritable
        FALSE,          // Set handle inheritance to FALSE
        0,              // No creation flags
        NULL,           // Use parent's environment block
        NULL,           // Use parent's starting directory 
        &si,            // Pointer to STARTUPINFO structure
        &pi )           // Pointer to PROCESS_INFORMATION structure
    ) 
    {
        printf( "CreateProcess failed (%d).\n", GetLastError() );
        return;
    }

    // Wait until child process exits.
    WaitForSingleObject( pi.hProcess, INFINITE );

    // Close process and thread handles. 
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
}