문제

저는 빌드 프로세스를 자동화하기 위해 노력해 왔으며 정기적으로 단위 테스트를 쉽게 실행할 수 있는 방법을 찾고 싶었습니다.이를 위해 프로젝트 파일을 검사하고 테스트할 솔루션 목록을 준비하는 간단한 앱을 만들었습니다.프로토타입은 테스트가 예상된 결과로 실행된다는 점에서 작동하지만 출력을 리디렉션하려고 하자마자 앱이 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.Win32예외:시스템은 system.diagnostics.process.startwithCreateProcess (ProcessStartInfo startInfo)에서 지정된 파일을 찾을 수 없습니다.야다야다야다"

이 모델을 사용하여 이 문제를 해결하기 위한 제안을 주시면 감사하겠습니다.

도움이 되었습니까?

해결책

UseShellExecute를 사용하면 파일이 다른 위치에서 검색됩니다.

에서 MSDN:

WorkingDirectory 속성은 UseShellExecute가 true일 때와 UseShellExecute가 false일 때 다르게 동작합니다.UseShellExecute가 true인 경우 WorkingDirectory 속성은 실행 파일의 위치를 ​​지정합니다.WorkingDirectory가 빈 문자열인 경우 현재 디렉터리에 실행 파일이 포함되어 있는 것으로 이해됩니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top