2013-04-19 6 views
13

Szukałem w internecie na to pytanie i wylądował na serwerze Błąd:Czy mogę wysłać tekst do STDIN aktywnego procesu w systemie Windows?

Can I send some text to the STDIN of an active process running in a screen session?

Wydaje się, że jest śmiesznie łatwe do osiągnięcia tego pod Linuksem. Ale potrzebuję go dla wiersza polecenia systemu Win32.

Tło: Mam aplikację, która odpytuje STDIN i jeśli naciśnie klawisz x, aplikacja zostanie zakończona. Teraz chcę przeprowadzić automatyczne testy, przetestować aplikację, a następnie ją wyłączyć.

Uwaga: Zabicie tego procesu nie jest możliwe, ponieważ obecnie badam problemy, które pojawiają się podczas zamykania aplikacji.

+0

To może być trudne do wykonania w pliku wsadowym, ale jeśli korzystasz z Powershell systemu Windows, możesz utworzyć instancję obiektu Process, wywołać metodę "Start" w celu uruchomienia aplikacji, a następnie wprowadzić tekst do właściwości "StandardInput" procesu. – Abbas

+0

@Abbas: Gdybyś mógł trochę więcej na ten temat wyjaśnić (np. Próbkę kodu), zdobyłbyś rep ... – eckes

Odpowiedz

14

. Klasy .NET framework: Process i ProcessStartInfo mogą być używane do tworzenia i kontrolowania procesu. Ponieważ Windows PowerShell może być używany do tworzenia instancji obiektów .NET, możliwość kontrolowania prawie każdego aspektu procesu jest dostępna z poziomu PowerShell.

Oto jak można wysyłać polecenia do dir procesowi cmd.exe (upewnij się, aby owinąć to w pliku .ps1 a następnie wykonać skrypt):

$psi = New-Object System.Diagnostics.ProcessStartInfo; 
$psi.FileName = "cmd.exe"; #process file 
$psi.UseShellExecute = $false; #start the process from it's 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