.NET: ввод данных в буфер ввода процесса

Мне нужно автоматизировать приложение командной строки. Он просит пользователя ввести пароль. Все мои попытки отправить пароль через STDIN не удалось. Теперь я пытаюсь сделать это с помощью программы-оболочки, используя .NET.

Я запускаю приложение, создавая новый процесс, устанавливаяStartInfo-свойства, а затем начать процесс:

Dim app_path As String
Dim app_args As String
Dim myProcess As Process = New Process()
myProcess.StartInfo.FileName = app_path
myProcess.StartInfo.Arguments = app_args
myProcess.StartInfo.UseShellExecute = False
myProcess.Start()

Я пытался использоватьStartInfo.RedirectStandardInput Собственность, но без успеха.

Теперь я пришел черезWriteConsoleInput функция отkernel32.dll что я включил так:

Declare Function WriteConsoleInput Lib "kernel32.dll" Alias "WriteConsoleInputA" (ByVal hConsoleInput As Integer, ByVal lpBuffer As String, ByVal nNumberOfCharsToWrite As Integer, ByRef lpNumberOfCharsWritten As Integer) As Boolean

Я могу получить управление процессом черезmyProcess.Handle свойство. Но отправка ввода во входной буфер таким способом также была невозможна.

Я нашел эти вопросы, но они не помогли:

Как мне записать «PAGE DOWN» во входной буфер консоли? (1475353)

Java - передача ввода во внешнее приложение C / C ++ (1421273)

Управление консольным приложением Windows с помощью стандартного канала (723424)

Используя StraceNtX.exe, я получил этот вывод в тот момент, когда приложение ожидает ввода:

[T4024] GetConsoleMode(f, 12d35c, 12d3af, 77bff894, ...) = 1
[T4024] SetConsoleMode(f, 0, 12d3af, 77bff894, ...) = 1
[T4024] ReadConsoleInputA(f, 12d348, 1, 12d360, ...) = 1

Может кто-нибудь сказать мне, что еще попробовать или как сделать выше, правильно? Спасибо!

Основываясь на ответе Тима Робинсона, я получил этот код сейчас, но он не работает:

myProcess = New Process()
myProcess.StartInfo.FileName = app_path
myProcess.StartInfo.Arguments = app_args
myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal
myProcess.StartInfo.UseShellExecute = False
myProcess.Start()
' Wait for process requesting passwort input
System.Threading.Thread.Sleep(3000)
Dim len As Integer
len = 0
Dim handle As Integer
handle = GetStdHandle(STD_INPUT_HANDLE)
WriteConsoleInput(handle, "Test", 4, len)

Моя программа представляет собой приложение командной строки, которое должно действовать как оболочка.

Входные данные отправляются, но таким образом, что они не вводятся в поле пароля, а под полем пароля отображается новое приглашение (даже без ввода).

Тим, можешь привести пример?

Ответы на вопрос(2)

Ваш ответ на вопрос