[VB.NET] 標準入力を使ったプロセス呼び出しで、黒い画面を表示しない

2014年8月25日

 標準入力を使用しない呼び出しの場合、ProcessStartInfo の .WindowStyle を ProcessWindowStyle.Hidden とすれば、黒い画面(cmd.exe)が表示されなくなるのですが、標準入力にデータを与えようとすると、.UseShellExecute を False にしろと言われ、これを False にすると、黒い画面が復活してしまいます(汗

 対策としては、.WindowStyle は忘れて、.CreateNoWindow を True に設定します。(NoWindow なので True で表示なしない。ややこしい…)
 また、この場合、データを .write しても標準入力のストリームを開きっぱなしにしていると、.write したデータは呼び出しプロセスにわたらないようなので、忘れずにストリームを .close にします。
 (以下のコード例だと、using を抜けるときに 結果的に .close はされるので、なくても動きますが…)

Dim psInfo = New System.Diagnostics.ProcessStartInfo
With psInfo
    .FileName = "msg"
    .Arguments = "*"
    .RedirectStandardInput = True
    .UseShellExecute = False
    .CreateNoWindow = True

End With

Using ps = New System.Diagnostics.Process()
    ps.StartInfo = psInfo
    ps.Start()

    Using sw = ps.StandardInput
        sw.Write("ああああ" & vbCrLf & "いいいいい")

        .sw.Close()
    End Using

    ps.Close()
End Using

 ただ、msg コマンドで試した結果なので、ほかのコマンドだと挙動が違うかもしれません…






カテゴリー: Program, VB.NET

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org