2014-01-06 119 views
0

我試圖通過使用child_process從nodejs運行控制檯應用程序(寫在cpp上)的實例。 下面是代碼:使用child_process從nodejs應用程序運行控制檯應用程序

function startSingleApp() { 
    console.log("startSingleApp entered"); 

    var exec = childProcess.exec; 
    var appOut; 
    exec("./ConsoleApplication.exe" ,function callback(error, stdout, stderr){ 
     appOut = stdOut; 
     console.log("started console app"); 
    }); 
}; 

而且ConsoleApplication4只打印字符串(COUT < <「一些字符串」) 預期的行爲:對ConsoleApplication4的每個實例 - 控制檯窗口打開,新工藝創造 實際行爲:沒有控制檯窗口,沒有進程創建。但是,在控制檯上打印的「開始控制檯應用程序」字符串(從nodejs應用程序啓動) ConsoleApplication.exe位於nodejs應用程序所在的同一文件夾中 如果用某些窗口應用程序(記事本或計算器)替換ConsoleApplication.exe - 它可以工作。 問題 - 這段代碼中缺少什麼?我是否需要手動將控制檯從控制檯應用程序中取出?
您的幫助將有所幫助。
Thaks提前

回答

2

如果從控制檯運行控制檯應用程序,它仍然會在同一控制檯中運行。 Windows控制檯只是在您通過資源管理器運行控制檯應用程序時自動打開的便利。

您可以自己嘗試:首先打開cmd.exe,然後運行ConsoleApplication.exe。它不會打開一個新窗口;輸出將出現在提示下方。然後你會得到另一個。

如果你想有一個窗口顯示出來,您可以手動運行cmd

exec("cmd /c ConsoleApplication.exe", function callback(error, stdout, stderr) { 
    appOut = stdOut; 
    console.log("started console app"); 
}); 
+0

感謝您的快速回復 - 但它仍然無效 –

+0

它是如何工作的?你真的需要窗戶嗎?你有沒有檢查回調通過的'error'參數? – Ryan

+0

某些更新:目前它將日誌打印到與nodejs相同的控制檯中。我刪除了等待鍵盤輸入在控制檯應用程序結束。感謝您的幫助 –

0

您可以使用start,使這樣一個新的控制檯窗口:

exec("start ConsoleApplication.exe", ....) 

,並添加一行在您的C++中:

getch(); 
+0

如果添加類似getch()或cin >> keyToRead它不起作用。刪除後 - 你可以看到控制檯輸出。無論如何感謝回覆 –

相關問題