2012-08-05 59 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

相關問題