我正在尝试开发一个系统,允许我编译一个可以运行我制作的其他程序的.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窗口的图片以帮助提供视觉效果,但显然我没有足够的声誉。抱歉。
答案 0 :(得分:1)
使用CreateProcess()
生成程序。 (https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425%28v=vs.85%29.aspx)
#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 );
}