2016-09-02 2 views
0

아마도 여기에 잘못된 방법이 있습니다. 장비를 구성하려면 프로그램을 실행해야합니다. 이것은 "배경"과 기본적으로 비 배치 프로그램에서 실행되어야하므로 사용자의 루프에서 일정한 입력을받습니다. 프로세스를 시작하고 읽기/쓰기를 시도하기 위해 아래 코드를 작성했지만 작동하지 않습니다. 프로그램이 올바르게 시작되고 있다는 것을 알고 있지만, 프로그램이 종료 될 때까지 출력이 없습니다. 내가 뭔가 잘못하고 있니?VB.Net 비 배치 프로그램을 실행하는 프로세스

Dim proc As Process 
Dim prompt As String 


Public Sub New() 
    proc = New Process() 

    AddHandler proc.OutputDataReceived, AddressOf CallbackDataReceived 
    AddHandler proc.ErrorDataReceived, AddressOf CallbackErrorDataReceived 

    prompt = "" 

    Dim pi As ProcessStartInfo = New ProcessStartInfo() 
    pi.UseShellExecute = False 
    pi.FileName = "processname and location" 
    pi.RedirectStandardInput = True 
    pi.RedirectStandardOutput = True 
    pi.RedirectStandardError = True 
    pi.CreateNoWindow = True 
    proc.StartInfo = pi 
    proc.EnableRaisingEvents = True 
    StartProcess() 

    proc.BeginOutputReadLine() 
End Sub 

Public Sub StartProcess() 
    proc.Start() 
End Sub 

Private Sub CallbackDataReceived(sender As Object, args As System.Diagnostics.DataReceivedEventArgs) 
    If Not String.IsNullOrEmpty(args.Data) Then 
     Console.Write(args.Data) 
    End If 
End Sub 

Private Sub CallbackErrorDataReceived(sender As Object, args As System.Diagnostics.DataReceivedEventArgs) 
    If Not String.IsNullOrEmpty(args.Data) Then 
     Console.Write(args.Data) 
    End If 
End Sub 

답변

0

출력이 비어있는 경우 인쇄 해보십시오. 중단 점을 설정하고 단계별로 시도이

Private Sub CallbackDataReceived(sender As Object, args As System.Diagnostics.DataReceivedEventArgs) 
    If String.IsNullOrEmpty(args.Data) Then 
     Console.Write(args.Data) 
    End If 
End Sub 

Private Sub CallbackDataReceived(sender As Object, args As System.Diagnostics.DataReceivedEventArgs) 
    If Not String.IsNullOrEmpty(args.Data) Then 
     Console.Write(args.Data) 
    End If 
End Sub 

에 변경이 많은에게 다음 번에 도움이 될 것입니다.

또한 출력은 새 행 뒤에 수신됩니다. 나는 WriteLine을하는 것이 좋습니다. 프로세스가 개행 문자를 보내지 않으면 아무 것도받을 수 없다고 생각합니다.

+0

그건 내 제출물에서 오탈자가 아닌 문제가 아니 었습니다. 내 코드에는 원래 'Not'가 있습니다. 나는 새로운 라인을 보냈지 만 여전히 주사위를 보려고하지 않았습니다. 사건은 발사조차하지 않는다. –

+0

@DanielMoss 코드를 복사/붙여 넣거나 Not를 붙여서 IpConfig라고 부릅니다. 오타가있는 경우 같은 프로그램을 디버깅하고 있는지 궁금합니다. –

+0

다른 문제. IPConfig는 배치 명령이므로 실행이 완료됩니다. 서버에 텔넷 (telnet)과 같은 것을 사용하려고하고 있으며 명령을 계속 보내고 입력을 받고 싶다고 가정 해보십시오. 프로그램과 마찬가지로 입력 루프가 있습니다. –

관련 문제