Shell関数を呼び出すVB.netプログラムがあります。このコードから生成されたテキスト出力をファイルに取得したいと思います。ただし、これは実行されたコードの戻り値ではないため、方法がわかりません。
このプログラムはサービスですが、すでに他の情報をログに記録しているため、問題なくディスクにアクセスできます。サービス全体には複数のスレッドがあるため、ファイルが書き込まれるときに、まだアクセスされていないことも確認する必要があります。
シェルからの出力をキャプチャすることはできません。
これをプロセスに変更する必要があり、プロセスから Standard Output (および場合によってはエラー)ストリームをキャプチャする必要があります。
次に例を示します。
Dim oProcess As New Process()
Dim oStartInfo As New ProcessStartInfo("ApplicationName.exe", "arguments")
oStartInfo.UseShellExecute = False
oStartInfo.RedirectStandardOutput = True
oProcess.StartInfo = oStartInfo
oProcess.Start()
Dim sOutput As String
Using oStreamReader As System.IO.StreamReader = oProcess.StandardOutput
sOutput = oStreamReader.ReadToEnd()
End Using
Console.WriteLine(sOutput)
標準エラーを取得するには:
'Add this next to standard output redirect
oStartInfo.RedirectStandardError = True
'Add this below
Using oStreamReader As System.IO.StreamReader = checkOut.StandardError
sOutput = oStreamReader.ReadToEnd()
End Using
出力をテキストファイルにパイプするだけですか?
MyCommand > "c:\file.txt"
次に、ファイルを読み取ります。
Dim proc As New Process
proc.StartInfo.FileName = "C:\ipconfig.bat"
proc.StartInfo.UseShellExecute = False
proc.StartInfo.RedirectStandardOutput = True
proc.Start()
proc.WaitForExit()
Dim output() As String = proc.StandardOutput.ReadToEnd.Split(CChar(vbLf))
For Each ln As String In output
RichTextBox1.AppendText(ln & vbNewLine)
lstScan.Items.Add(ln & vbNewLine)
Next
================================================== =====================以下に示すように、2行でバッチファイルを作成します。
echo off
ipconfig
'このバッチファイルをipconfig.batまたは選択した名前に保存してください。ただし、最後にドットバットを付けてください。