2016-06-09 83 views
0

我在Node.Js中運行外部可執行文件時遇到問題。 我的代碼如下所示:在Node.JS中運行.EXE

function executeFile(m, cb) { 
    var urlTarget = "D:/thesis_node/upload/1.jpeg"; 
    var urlScene = "D:/thesis_node/upload/scene.jpeg"; 
    exec(__execDirName+'/FeatureDetection.exe', [urlTarget, urlScene], function(error, stdout, stderr) { 
     if(error) return cb(error); 
     cb(null, stdout); 
    }); 
} 

當我運行該腳本,它什麼也沒做,它似乎它做一個過程,但它永遠不會結束。如果我使用命令提示符運行我的EXE文件,它可以工作。 .exe文件返回值。我需要得到那個價值。

更新

其實我開始想的東西可能是錯誤的,在返回值我的C++代碼。

int main(int argc, char* argv[]) { 
    int a = 5 + 10; 
    return a; //Will this a can be received by Node.Js? 
} 

這是正確的方法嗎?

+0

你可以檢查進程管理器,看看** FeatureDetection.exe **是否仍在運行? – zero298

+0

我運行它,並直接檢查我的進程管理器,但沒有找到** FeatureDetection.exe **正在運行。或者它可能是我沒注意到的,因爲這個過程只需要大約1秒。 @ zero298 –

回答

1

我不相信你提供了你想提供給子進程的參數作爲child_process.exec()的第二個參數。而是將參數直接連接到exec()的第一個參數。

在這裏看到的文檔:child_process.exec(command[, options][, callback])

具體做法是:

命令<字符串>運行,與空格分隔的參數

因此,對於你的情況的命令,會想要類似於:

var cmdToExec = (__execDirName + '/FeatureDetection.exe' + ' ' + urlTarget + ' ' + urlScene); 

exec(cmdToExec, function(){...}); 

或者,你可以嘗試child_process.execFile(file[, args][, options][, callback])

execFile()作爲並列於exec(),您現在正在使用,採取的參數數組作爲第二個參數。

+0

所以我試着用你的代碼片段 'var cmdToExec =(__execDirName +'/FeatureDetection.exe'+''+ urlTarget +''+ urlScene); (cmdToExec,function(){...});' 並且它仍然不起作用。看起來節點正在響應exec調用,但實際上並沒有發生任何事情。至於'execFile()'使用我以前的代碼應該沒問題吧? @ zero298 –