Это было 3 дня, когда я ищу на форумах способ сделать работу своей программой, и она все еще не работает...
Я работаю над своим первым проектом AngularJS, и мне нужно запустить внешнюю программу, когда пользователь нажимает на изображение.
У меня есть модуль с именем tool-list, а в моем tool-list.component.ts я экспортирую класс под именем ToolListComponent. В этом классе у меня есть функция запуска моей внешней программы.
launchtool(){
alert("I'm trying to launch test.bat!");
const spawn = require('child_process').spawn;
//const bat = spawn('start', ['./TrashCode/test.bat']);
//const bat = spawn('cmd.exe', ['start', './TrashCode/test.bat']);
//var exec = child_process.spawn('start', './TrashCode/test.bat', {detached: true});
alert("It works!");
}
В комментариях я держу несколько строк, которые я пробовал.
Моя проблема: когда я использую require => ошибка TS2304 не может найти имя "require". Или просто child_process => ошибка не может найти модуль 'child_process'.
Я определенно не первый, у кого такая проблема, но ни одно из решений не работало для меня (импорт, импорт * as, require, declare function require (имя: строка), var require: any; [...]).
Возможно, решение очевидно для некоторых из вас; Я рассматриваю свои уроки в этом случае.
Сервер и клиент будут на стороне клиента, я просто использую веб как HMI
Вы не можете запускать дочерний процесс через веб-браузер, если ваше приложение не работает в контейнере приложений для настольных компьютеров, таком как Electron (что делает модули Node доступными в пределах его веб-времени). Было бы ужасно неуверенно позволять браузерам выполнять сценарии оболочки - представьте, если всплывающее окно могло загрузить .bat
и сразу же запустить его на вашем компьютере...
Тем не менее, если вы хотите, чтобы командный файл запускался на сервере и просто запускался клиентом, это вполне осуществимо - просто вызовите child_process.spawn()
в ответ на вызов REST.
$http
для удаленного вызова этого API из вашего приложения.