Исполняемый сервер, запущенный из сценария .bat, нуждается в вводе для продолжения выполнения?

#windows #powershell #batch-file

Вопрос:

Я написал небольшой пакетный файл для запуска исполняемого файла, расположенного в том же каталоге, с некоторыми переменными среды.

Сам исполняемый файл является узловым сервером, упакованным с pkg, и он работает нормально, но похоже, что программа запускается и продолжает входить в stdout только в том случае, если я нажимаю клавиши, пока терминал находится в фокусе. Если журналы передаются быстро и между журналами нет большой задержки, то программа, похоже, работает нормально, но в противном случае, если есть какое-либо время простоя, то, похоже, для продолжения выполнения ей требуется ввод.

У меня есть этот файл:

 @echo off
SET PORT=3004
SET NODE_ENV=development
SET ENV=development
START /d "." main.exe
 

…и дважды щелкните start_program.bat по кнопке, которая открывает окно терминала, в котором сервер запускается нормально, но не отвечает на HTTP-запросы, пока я не нажму клавишу. Любой HTTP-запрос просто останавливается, пока я не нажму клавишу в окне терминала, затем запрос продолжается, как будто ничего не случилось.

Не уверен, делаю ли я что-то странное в этом файле , или мне нужно больше параметров START , но я довольно новичок в запуске кода в Windows, поэтому буду признателен за любое направление.

Комментарии:

1. Нет необходимости использовать START для запуска main.exe — просто вызовите его напрямую, и чтобы убедиться, что вы ссылаетесь на него в том же каталоге, что и сам пакетный файл, используйте "%~dp0main.exe"

2. Проблема , скорее всего, связана с попыткой использовать START , и не по причине, упомянутой в предыдущем комментарии, а потому, что вы также назвали свой скрипт start . Пожалуйста, переименуйте свой скрипт в имя, которое также не является именем другой команды.

3. Отредактировано, чтобы уточнить, что имя моего файла bat на самом деле не start.bat, извините, это был пример. Поведение по-прежнему происходит независимо от имени файла.

Ответ №1:

попробуй убежать main.exe с командой

 echo.|main.exe