2016-06-09 21 views
0

Ich habe Probleme beim Ausführen einer externen ausführbaren Datei in Node.Js. Mein Code sieht wie folgt aus:Ausführen von .EXE in Node.JS

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); 
    }); 
} 

Als ich das Skript ausführen, tat es nichts und es scheint, es ist ein Prozess zu tun, aber es endet nie. Wenn ich meine EXE-Datei über die Eingabeaufforderung ausführe, funktioniert sie. Die EXE-Datei gibt Wert zurück. Ich muss diesen Wert bekommen.

aktualisiert

Eigentlich begann ich etwas zu denken könnte bei der Rückkehr des Wertes mit meinem C++ Code falsch sein.

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

Ist dies der richtige Weg?

+0

Können Sie Prozessmanager überprüfen und sehen, ob ** FeatureDetection.exe ** noch läuft? – zero298

+0

Ich starte es und überprüfe meinen Prozessmanager direkt, aber nicht gefunden ** FeatureDetection.exe ** läuft. Oder es ist mir nicht aufgefallen, da der Vorgang nur etwa 1 Sekunde dauert. @ zero298 –

Antwort

1

Ich glaube nicht, dass Sie die Argumente, die Sie dem untergeordneten Prozess als zweites Argument an child_process.exec() zur Verfügung gestellt werden möchten. Stattdessen verketten Sie die Argumente direkt in das erste Argument von exec().

finden Sie in der Dokumentation hier: child_process.exec(command[, options][, callback])

Im Einzelnen:

Befehl <String> Der Befehl, mit Leerzeichen getrennte Argumente

Also für Ihren Fall zu laufen, Sie möchte etwas wie:

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

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

Alternativ können Sie child_process.execFile(file[, args][, options][, callback])

execFile() versuchen, so zu exec() apposed, die Sie jetzt verwenden, ist eine Argumente Array als zweiten Parameter übernehmen.

+0

Also habe ich versucht, mit Ihrem Schnipsel 'var cmdToExec = (__execDirName + '/ FeatureDetection.exe' + '' + urlTarget + '' + urlScene); exec (cmdToExec, function() {...}); ' und es funktioniert immer noch nicht. Es sieht so aus, als ob der Knoten auf den Exec-Aufruf reagiert, aber tatsächlich passiert nichts. Und wie 'execFile()' mit meinem vorherigen Code hätte in Ordnung sein sollen, oder? @ zero298 –

Verwandte Themen