Ошибка при попытке записать входные данные в запущенное консольное приложение с помощью пакета
У меня есть exe-файл, который я хочу запустить с помощью командного файла.
Exe-файл - это стороннее консольное приложение, которое запрашивает ввод три раза.
Итак, я хочу заполнить его пустой строкой someText и someOtherText
(echo. echo someText echo someOtherText) | call config.exe remove
Но я получаю такую ошибку:
Cannot read keys when either application does not have a console or when console input has been redirected. Try Console.Read.
В чем может быть проблема, посоветуйте, пожалуйста, хотя бы направление поиска?
У меня такая же ошибка, даже если попытаться выполнить более простую команду, например:
echo. | call config.exe remove
Ответы
Ваш config.exe
вообще не принимает перенаправление. Это требует реальных консольных буферов.
- Если вы хотите автоматизировать его, вы можете создать другое консольное приложение, которое будет
- начните
config.exe
использовать CreateProcessW - напишите свои строки в STD_INPUT_HANDLE, используя WriteFile (ASCII,
\n
разделенные строки) или WriteConsoleInputW (если вам нужны символы Unicode) - после завершения записи просто дождитесь
config.exe
завершения и возврата кода выхода
Еще один вариант попроще - терминал ConEmu (я автор). Есть скрипт GuiMacro, который можно легко использовать с консоли. Итак, вы можете просто запустить из командной строки или обернуть пакетным файлом (запустить в ConEmu):
ConEmuC.exe -GuiMacro print "\ nsomeText \ nsome Other Text \ n" & config.exe remove