2017-12-26 32 views
0

これはopenfiles.exeを実行してその出力を返します openfiles.exeをコマンドラインで実行すると、正常に動作します 私はここでそれを実行すると、エラーはありませんが、私はMessageboxはで何を取得Openfiles.exeからOutputを読み込もうとしていますが、これは動作していません

Dim NewProcess As New Process() 
    With NewProcess.StartInfo 
     .FileName = "openfiles.exe" 
     .Arguments = "/query /s FakeServer/fo csv /V /U FakeDomain\Fakeuser/P pword" 
     .RedirectStandardOutput = True 
     .RedirectStandardError = True 
     .RedirectStandardInput = True 
     .UseShellExecute = False 
     .WindowStyle = ProcessWindowStyle.Normal 
     .CreateNoWindow = False 
    End With 

    NewProcess.Start() 

    System.Threading.Thread.Sleep(5000) 

    MsgBox(NewProcess.StandardOutput.ReadToEnd) 
+0

一部のアプリケーション(FFmpegなど)は、出力ストリームではなくエラーストリームに書き込みます。 'MsgBox(NewProcess.StandardError.ReadToEnd())'も試しましたか? –

答えて

0

これは、私はそれはあなたがやろうとしているものと類似している必要があり、単にサンプル・コードです。しかし、私のアプリはcmd.exeを使ってコマンドを実行しようとしていましたが、その結果をリアルタイムでテキストボックスに表示しようとしていました。あなたはそれに応じてそれを修正しようとすることができます。

Dim cmd As New Process() 
Dim strCommandLine As String = "Echo Hello World" 

cmd.StartInfo.FileName = "cmd.exe" 
cmd.StartInfo.RedirectStandardError = True 
cmd.StartInfo.RedirectStandardInput = True 
cmd.StartInfo.RedirectStandardOutput = True 
cmd.StartInfo.CreateNoWindow = True 
cmd.StartInfo.UseShellExecute = False 
cmd.EnableRaisingEvents = True 
Application.DoEvents() 

AddHandler cmd.ErrorDataReceived, AddressOf OutputHandler 
AddHandler cmd.OutputDataReceived, AddressOf OutputHandler 

cmd.Start() 

cmd.StandardInput.WriteLine(strCommandLine) 
cmd.StandardInput.Flush() 
cmd.StandardInput.Close() 
cmd.BeginErrorReadLine() 
cmd.BeginOutputReadLine() 
cmd.Close() 

Delegate Sub UpdateTextBoxDelg(text As String) 
Public myDelegate As UpdateTextBoxDelg = New UpdateTextBoxDelg(AddressOf UpdateTextBox) 

Public Sub UpdateTextBox(text As String) 
    txtOutput.Text += text & Environment.NewLine 
    txtOutput.SelectionStart = txtOutput.Text.Length 
    txtOutput.ScrollToCaret() 
End Sub 

Private Sub OutputHandler(sender As Object, e As DataReceivedEventArgs) 
    If Me.InvokeRequired = True Then 
     Me.Invoke(myDelegate, e.Data) 
    Else 
     UpdateTextBox(e.Data) 
    End If 
End Sub 
関連する問題