Ошибка при попытке записать входные данные в запущенное консольное приложение с помощью пакета

Aug 19 2020

У меня есть 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

Ответы

1 Maximus Aug 27 2020 at 08:53

Ваш config.exeвообще не принимает перенаправление. Это требует реальных консольных буферов.

  1. Если вы хотите автоматизировать его, вы можете создать другое консольное приложение, которое будет
  • начните config.exeиспользовать CreateProcessW
  • напишите свои строки в STD_INPUT_HANDLE, используя WriteFile (ASCII, \nразделенные строки) или WriteConsoleInputW (если вам нужны символы Unicode)
  • после завершения записи просто дождитесь config.exeзавершения и возврата кода выхода
  1. Еще один вариант попроще - терминал ConEmu (я автор). Есть скрипт GuiMacro, который можно легко использовать с консоли. Итак, вы можете просто запустить из командной строки или обернуть пакетным файлом (запустить в ConEmu):

    ConEmuC.exe -GuiMacro print "\ nsomeText \ nsome Other Text \ n" & config.exe remove