Мне нужно автоматизировать приложение командной строки. Он просит пользователя ввести пароль. Все мои попытки отправить пароль через STDIN не удались. Теперь я пытаюсь сделать это с помощью программы-обертки с использованием .NET..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 приложение ж/STDIN трубы (723424)
Использование StraceNtX.exe I получил этот выход на данный момент приложение ждет ввода:
[T4024] GetConsoleMode(f, 12d35c, 12d3af, 77bff894, ...) = 1
[T4024] SetConsoleMode(f, 0, 12d3af, 77bff894, ...) = 1
[T4024] ReadConsoleInputA(f, 12d348, 1, 12d360, ...) = 1
Может кто-нибудь сказать мне, что еще попробовать или как сделать выше правильно? Спасибо!
на основе Tim Робинсонам answere Я получил этот код сейчас, но он не работает:
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)
Моя программа является командной строки приложение, которое должно выступать в качестве обертки.
Вход отправляется, но не указан в поле пароля, но под полем пароля отображается новый промах (даже не отображая ввод).
Тим, не могли бы вы привести мне пример?
Что приложение, которое нуждается пароль? Там может быть проще, чем это. –
Это консольное приложение для диспетчера сертификатов Cisco cisco_cert_mgr.exe Но я действительно искал для любого другого решения, но, похоже, его нет. – sc911