2014-01-06 118 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它不起作用。删除后 - 你可以看到控制台输出。无论如何感谢回复 –

相关问题