2012-08-05 60 views
0

我正在使用我自己的C++程序中的API,该程序通过TCP连接的服务器客户关系与API的第三方应用程序进行通信。此时,我必须先手动打开服务器控制台应用程序(.exe),然后再打开客户端控制台应用程序(也是.exe)。为了执行必要的任务,这两个窗口在我的应用程序中必须在后台保持打开状态。运行C++中保持开放的多个exe控制台应用程序

我想按照上面介绍的顺序自动执行这两个.exe文件。我已经尝试了两次连续的ShellExecute()Windows API函数调用,我尝试了旧的system()函数,并试图打开这样的批处理文件: ShellExecute(NULL,“open”,“ocrtext.bat”,NULL, NULL,SW_SHOW);

凡批处理文件基本是这样的: 启动C:\ videoocr \服务器\ ocrD.exe START /wc:\videoocr\server\ocrGW.exe

所有这些选项也存在同样的问题:服务器控制台窗口打开正常,但客户端窗口无法打开。我怀疑这个问题与无法调用多个控制台应用程序有关,每个控制台应用程序都保持与这些方法一致。

我该怎么办?先谢谢你。

+0

使用'ShellExecuteEx'或'CreateProcess'直接运行服务器控制台(使用其EXE路径)。使用'INFINITE'或有限的时间将服务器进程句柄传递给'WaitForInputIdle'函数。然后直接执行客户端控制台(使用其EXE路径)。 – Jay 2012-08-06 00:30:41

+0

我很抱歉,但我不会在这里跟着你。你能给一个编码的例子吗?我从哪里获得服务器进程句柄? – user1530101 2012-08-06 21:26:03

回答

0

呼叫在批处理文件中使用此命令的应用程序:

start "App1" /min cmd.exe /c startApp1.exe 
start "App2" /min cmd.exe /c startApp2.exe 
... 

有了这个批处理文件可以打开不同的控制台。

+0

这不起作用。只有“App1”打开。我发现App2没有打开,因为它收到一个错误,说“主机加载失败。”为了得到这个错误,我只需在批处理文件中写入'c:\ startApp2.exe',然后再写'pause'。当我双击它的目录中的程序时,它打开罚款。我检查文件的拼写和路径,它是正确的。使用你的命令“App2”,我发现/ c修饰符根本不起作用,但是/ b至少让我看到“主机加载失败”的错误。我不知道什么是/ B,我尝试了另一个建议。 – user1530101 2012-08-06 21:15:04

相关问题