2012-01-10 10 views
13

私はShell関数を呼び出すVB.netプログラムを持っています。私はこのコードから生成されたテキスト出力をファイルに入れたいと思います。しかし、これは実行されたコードの戻り値ではありませんので、実際にどのようにすればよいか分かりません。VB.netでシェルコマンドの出力を取得

このプログラムはサービスですが、私はすでに、他の情報をログとしてディスクへのアクセスがないという問題がありました。サービス全体が複数のスレッドを持っているので、ファイルが書き込まれたときにまだアクセスされていないことを確認する必要があります。

答えて

24

あなたはシェルからの出力をキャプチャすることができません。

これをプロセスに変更する必要があります。プロセスから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) 
出力において
+3

うわー、これはそのような小さな偉業のために複雑です... –

6

ジャストパイプテキストファイルに出力?

MyCommand > "c:\file.txt" 

ファイルを読み込みます。

+2

実際には、私は昨夜これを読む前に解決策を見つけ出しました。それはかなり近いです。私は毎回結果を追加したいので、代わりに>>を使用しますが、とにかくありがとうございます。 –

+1

は、私はあなたが考慮すべきで言及するのを忘れてしまった 'MyCommand>「C:\ file.txtは2>&1 'あなたはも*エラー*ファイル内のレポートデフォルトのエラー出力によっては、ファイルに含まれていない – MarkJ

+0

をキャプチャしたい場合。匿名downvoter:コメントを残すケア – MarkJ

0
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))文字列としてLNそれぞれについて RichTextBox1.AppendText( lstScan.Items.Add)& vbNewLine LN(LN & vbNewLine:ここ

は一例で) 次に

=========================================== =============== 作成する2行のバッチファイルを下記のように:

は、あなたがipconfig.batとして、このバッチファイルを保存したり、uを選ぶことにしたが、uは、ドットバットを置くことを確認してください任意の名前を確認して「

でipconfig

をオフにエコーそれの終わりに。

関連する問題