2015-11-20 54 views
-1

在我確切地知道我在找什麼之前,我用不同的標題問了這個問題;希望我能得到一些答案,並以明確的標題重新發布。無法重定向標準輸入

我試圖將標準輸入重定向到應用程序,所以我可以從我的Visual Basic程序控制它。

Public Class MyClass 
    Dim StreamWriteUtility As System.IO.StreamWriter 
    Dim StreamReadUtility As System.IO.StringReader 
    Dim ProcessInfo As ProcessStartInfo 
    Dim Process As Process 

    Public Sub StartUSBCapture(ByVal DataStorageLocation As String) 

     ProcessInfo = New ProcessStartInfo("C:\FW_Qualification_Suite\data-center-windows\data-center\bin\datacenter.cmd", "-c ") 
     ProcessInfo.CreateNoWindow = True 
     ProcessInfo.UseShellExecute = False 'Must be changed if redirect set to True 
     ProcessInfo.RedirectStandardInput = True 

     Process.Start(ProcessInfo) 

     StreamWriteUtility = Process.StandardInput 

     While True 
     StreamWriteUtility.WriteLine("run") 'Looping for test to ensure this isn't a timing issue 
     End While 
    End Sub 
End Class 
+0

使用Avast?然後卸載它。 –

+0

@Hans:不,不使用Avast。 – nobby

+0

嘗試這樣做........... shell(「cmd.exe/c cd C:\ FW_Qualification_Suite \ data-center-windows \ data-center \ bin \&datacenter.cmd&PAUSE」,AppWinStyle .NormalFocus,True,-1)............看eveything是否正常運行.....另外,你的意思是「While SWUtility」或「While True」? – Nefariis

回答

0

我看到一些語法錯誤,可能會給你帶來麻煩。例如,您需要讀取StreamWriter的標準輸入,而不是SWUtility(您從未定義過)的任何內容,同時啓動進程的sytnax只是process.start而不是process = process.start。最後,你錯過了process.WaitForExit()這肯定會把所有東西搞亂。

Public Class MyClass 
    Dim sw As System.IO.StreamWriter 
    Dim sr As System.IO.StreamReader 
    Dim ProcessInfo As New ProcessStartInfo 
    Dim Process As New Process 

    Public Sub StartUSBCapture(ByVal DataStorageLocation As String) 

     ProcessInfo = New ProcessStartInfo("C:\FW_Qualification_Suite\data-center-windows\data-center\bin\datacenter.cmd") 
     ProcessInfo.Arguments = "-c" 
     ProcessInfo.CreateNoWindow = True 
     ProcessInfo.UseShellExecute = False 
     ProcessInfo.RedirectStandardInput = True 
     ProcessInfo.RedirectStandardOutput = True 
     Process.Startinfo = ProcessInfo 
     Process.Start() 

     Process.StandardInput.WriteLine("Your Line") 
     Process.StandardInput.WriteLine("Your Line 2") 
     Process.StandardInput.WriteLine("Exit") 

     sw = Process.StandardInput 
     sr = Process.StandardOutput 

     Dim line As String 
     Do 
      Line = sr.ReadLine() 
      MsgBox(line) 
     Loop Until line Is Nothing 
     sr.Close() 
    End Sub 
End Class 
+0

感謝您的回覆。我曾讓我發佈的代碼難以置信;我已經把它清理乾淨了。您的建議在使用「Process.WaitForExit()」時遇到了問題。我不想關閉應用程序,直到我能夠發送它的命令爲止。因此,WaitForExit會導致我的應用程序無限期地暫停,直到用戶關閉另一個應用程序,因此永遠不會到我的應用程序應該發送命令的部分。此外,啓動過程的語法似乎在這裏沒有什麼區別,但我已經清理了它,以避免混淆 – nobby

+0

我成功地將此工作(顯然不是與你的確切命令),它成功地讀取輸入並打印輸出...「退出」或「退出」可能是必要的(嘗試兩者)。 – Nefariis

+0

我不明白。對我來說,甚至不會啓動我的應用程序。 – nobby