Можно ли отправить какой-либо текст в STDIN активного процесса под Windows? - программирование

Можно ли отправить какой-либо текст в STDIN активного процесса под Windows?

Я искал в Интернете этот вопрос и приземлился на Server Fault:

Могу ли я отправить какой-либо текст в STDIN активного процесса, выполняющегося на сеансе экрана?

Похоже, что это легко сделать в Linux. Но мне это нужно для командной строки Win32.

Справочная информация. У меня есть приложение, которое проверяет STDIN, и если я нажимаю клавишу x, приложение завершается. Теперь я хочу провести автоматическое тестирование, протестировать приложение и затем закрыть его.

Примечание: просто убить процесс не является вариантом, так как я сейчас изучаю проблемы, возникающие во время отключения моего приложения.

4b9b3361

Ответ 1

.NET framework Process и ProcessStartInfo классы могут использоваться для создания и управления обработать. Поскольку Windows PowerShell может использоваться для создания экземпляров объектов .NET, возможность управления почти всеми аспектами процесса доступна из PowerShell.

Здесь вы можете отправить команду dir в процесс cmd.exe (обязательно оберните это в файл .ps1, а затем выполните script):

$psi = New-Object System.Diagnostics.ProcessStartInfo;
$psi.FileName = "cmd.exe"; #process file
$psi.UseShellExecute = $false; #start the process from it own executable file
$psi.RedirectStandardInput = $true; #enable the process to read from standard input

$p = [System.Diagnostics.Process]::Start($psi);

Start-Sleep -s 2 #wait 2 seconds so that the process can be up and running

$p.StandardInput.WriteLine("dir"); #StandardInput property of the Process is a .NET StreamWriter object