2009-11-17 3 views
0

저는 빌드 프로세스를 자동화하고 있으며 단위 테스트를 정기적으로 실행하는 데 어려움을 겪고 싶었습니다. 이를 위해 프로젝트 파일을 검사하고 테스트 할 솔루션 목록을 준비하는 간단한 응용 프로그램을 작성했습니다. 프로토 타입은 테스트가 예상 된 결과와 함께 실행된다는 점에서 작동하지만, 출력을 리디렉션하려고하면 파일을 찾을 수 없다는 불평을하면서 Process.Start 호출에 응용 프로그램 폭탄이 생깁니다.출력을 리디렉션하려고 할 때 Process.Start가 실패합니다.

여러 게시물을 포함하여 다른 곳에서 여러 번 반복 해 보았지만 아직 제대로 작동하지 않습니다.

이 작동 :

Private Function WTF(ByVal aWorkingDirectory As String, ByVal aFileName As String, ByVal aArguments As String) As Boolean 

    Dim lProcess As New Process() 
    With lProcess 
     .StartInfo.WorkingDirectory = aWorkingDirectory 
     .StartInfo.FileName = aFileName 
     .StartInfo.Arguments = aArguments 
    End With 
    lProcess.Start() 
    lProcess.WaitForExit() 

End Function 

이 작동하지 않습니다 :

Private Function WTF(ByVal aWorkingDirectory As String, ByVal aFileName As String, ByVal aArguments As String) As Boolean 

    Dim lProcess As New Process() 
    With lProcess 
     .StartInfo.CreateNoWindow = True 
     .StartInfo.UseShellExecute = False 
     .StartInfo.RedirectStandardOutput = True 
     .StartInfo.RedirectStandardError = True 
     .StartInfo.WorkingDirectory = aWorkingDirectory 
     .StartInfo.FileName = aFileName 
     .StartInfo.Arguments = aArguments 
    End With 
    lProcess.EnableRaisingEvents = True 
    AddHandler lProcess.OutputDataReceived, AddressOf blah 
    AddHandler lProcess.ErrorDataReceived, AddressOf blah 
    lProcess.Start() 
    lProcess.BeginOutputReadLine() 
    lProcess.BeginErrorReadLine() 
    lProcess.WaitForExit() 

End Function 

Private Shared Sub blah(ByVal sender As Object, ByVal e As System.Diagnostics.DataReceivedEventArgs) 
    Console.WriteLine(e.Data) 
End Sub 

"System.ComponentModel.Win32Exception을 : 시스템 파일이 System.Diagnostics.Process.StartWithCreateProcess에서 지정 찾을 수 없습니다 (ProcessStartInfo startInfo) at System.Diagnostics.Process.Start() ... yadda yadda yadda "

모든 sugges 이 모델을 사용하여이 문제를 해결할 수 있습니다.

+0

오류가 발생하면 'a 파일 이름'을 찾을 수 없습니다. – Gonzalo

답변

2

UseShellExecute는 파일을 다른 위치에서 찾습니다. MSDN에서

: 인 UseShellExecute가 인 UseShellExecute가 false 때보에 해당하는 경우

WORKINGDIRECTORY 속성은 다르게 동작합니다. UseShellExecute가 true이면 WorkingDirectory 속성은 실행 파일의 위치를 ​​지정합니다. WorkingDirectory가 빈 문자열이면 현재 디렉토리에 실행 파일이 들어있는 것으로 간주됩니다.

UseShellExecute가 false 인 경우 WorkingDirectory 속성은 실행 파일을 찾는 데 사용되지 않습니다. 대신, 시작된 프로세스에 의해 사용되며 새 프로세스의 컨텍스트 내에서만 의미가 있습니다.

+0

항상 작은 것들 - 감사합니다! –