2015-11-20 2 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

Смежные вопросы