web-dev-qa-db-ja.com

WindowsでアクティブなプロセスのSTDINにテキストを送信できますか?

私はその質問をWebで検索し、サーバー障害に到達しました。

スクリーンセッションで実行されているアクティブなプロセスのSTDINにテキストを送信できますか?

Linuxでこれを実現するのは途方もなく簡単なようです。しかし、Win32コマンドプロンプトには必要です。

背景:STDINをポーリングするアプリケーションがあり、を押すと x キーを押すと、アプリケーションが終了します。ここで、自動テストを実行し、アプリケーションをテストしてからシャットダウンします。

:現在、アプリケーションのシャットダウン中に発生する問題を調査しているため、プロセスを強制終了することはできません。

19
eckes

.NET Frameworkの Process および ProcessStartInfo クラスを使用して、プロセスを作成および制御できます。 Windows PowerShellを使用して.NETオブジェクトをインスタンス化できるため、PowerShell内からプロセスのほぼすべての側面を制御する機能を利用できます。

dirコマンドをcmd.exeプロセスに送信する方法は次のとおりです(これを.ps1ファイルでラップしてから、スクリプトを実行してください)。

$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
19
Abbas