Я просто пытаюсь погрузиться в Node.js и тестирую базовые функции, которые считаю полезными для выполнения моего проекта. Один из них будет запускать небольшой файл .exe, который я закодировал на C++, который обрабатывает данные из текстовых файлов. Я понял, что child_process.execFile может быть лучшим методом для этого. Итак, я написал небольшой сценарий для запуска сервера и вызова исполняемого файла. Для первого теста я установил путь к «стороннему» - .exe, и все заработало нормально (программа запускается как положено). Однако, когда я нацеливаюсь на свой собственный .exe, ничего не происходит, хотя путь правильный (что я проверяю с помощью fs.access). Выполнение файла вручную простым двойным щелчком на .exe также работает нормально, и txt-файлы обрабатываются соответствующим образом. Так что теперь мне интересно, получится ли что-нибудь. в корне неверно, например должен ли .exe соответствовать определенному условию, чтобы быть исполняемым с execFile?
Вот мой код:
var http = require('http');
const fs = require('fs');
var server = http.createServer(function(req, res){
console.info('Request was made: ' + req.url);
res.writeHead(200, {'Content-Type': 'text/plain'});
});
server.listen(3000, '127.0.0.1');
console.info('Listening to port 3000');
var executablePath = "C:/path/to/file.exe";
fs.access(executablePath, fs.constants.F_OK, (err) => {
console.info(`${executablePath} ${err ? 'does not
exist':'exists'}`);
});
const execFile = require('child_process').execFile;
const child = execFile(executablePath, (error, stdout, stderr) => {
if (error) {
console.error('stderr', stderr);
throw error;
}
console.info('stdout', stdout);
});
Вывод консоли: «... C: /path/to/file.exe существует». execFile не вызывает ошибок. Спасибо за вашу помощь и извинения за мой нубский язык!
Не уверен, следует ли мне редактировать сообщение или комментарий, но я обнаружил (нубскую) ошибку: пути не относятся к exe-файлу, а относятся к index.js с помощью команды execFile. Поскольку целевые папки для вывода exe-файла там не присутствовали, вывод вообще не генерировался. Извини, что зря потратил время, но все равно спасибо, Нариго - каким-то образом ты заставил меня задуматься в правильном направлении ...





Я бы попробовал проверить
fs.accessсfs.constants.X_OK, чтобы узнать, исполняется ли он. Если вы хотите выполнитьexecFileпослеfs.access, вы можете также поместить его в обратный вызовfs.access. Может быть, это поможет вам отлаживать, я не использую Windows ... еще одна дикая догадка - использоватьexecили предоставить опциюshellдляexecFile.