Я попытался получить результат обратного вызова exe файла, когда я делаю оболочку следующим образом:
var oShell = new ActiveXObject("WScript.Shell");
var args = folderName + "\\dir\\scan.exe scan " + params.join(" ");
var ret = oShell.Run(args ,0 ,true);
но ret дает мне 0 за неудачу и 1 за успех. когда я запускаю файл в cmd следующим образом:
scan.exe arg1 arg2 arg3
это возвращает правильный результат, который я хотел: "test/test", а не 1...
Что я могу сделать?
tnx много
Я знаю, что, возможно, я немного опоздаю, чтобы ответить на этот вопрос, но я надеюсь, что он все равно может помочь кому-то.
Я достиг этого с помощью функции oShell.Exec()
а не с oShell.Run()
.
oShell.Exec()
возвращает объект с свойством StdOut
который действует как текстовый файл, поэтому вы можете выполнять ReadLine()
, ReadAll()
и т.д.
Проблема в том, что он не StdOut
завершения команды, поэтому при запуске кода очень вероятно, что ваш объект StdOut
не будет undefined
. Вы должны добавить этот параметр ожидания в самой команде.
var wshShell = new ActiveXObject("WScript.Shell");
try {
// Excecute the 'cd' command.
wshShell.CurrentDirectory = "C:\\Users";
var execOut = wshShell.Exec('cmd /C start /wait /b cd');
}
catch (e) {
console.log(e);
}
// Get command execution output.
var cmdStdOut = execOut.StdOut;
var line = cmdStdOut.ReadLine();
console.log(line);
Приведенный выше код выполнит команду cd
в каталоге C:\Users
и сохранит вывод в line
.
Надеюсь, это ответит на вопрос.