質問

私は、私たちのビルドプロセスの自動化に取り組んで、定期的にユニットテストを実行するための痛みのない方法を考え出すと思ってきました。そのために私は一緒にプロジェクトファイルを調べて、テストへの解決策のリストを作成するシンプルなアプリを投げました。プロトタイプは、すぐに私は、ファイルが見つからなかったことを訴えて、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)    System.Diagnostics.Process.Start()で... yadda yadda yadda "

このモデルを使用して、これを解決するための任意の提案をいただければ幸いです。

役に立ちましたか?

解決

あるUseShellExecuteは、ファイルが別の場所で探さなければなります。

MSDN のから:

あるUseShellExecuteがあるUseShellExecuteがfalseの場合よりも真であるときWORKINGDIRECTORYプロパティは動作が異なります。あるUseShellExecuteがtrueの場合、WORKINGDIRECTORYプロパティは、実行可能ファイルの場所を指定します。 WORKINGDIRECTORYが空の文字列の場合は、カレントディレクトリが実行可能ファイルを含むように理解されています。

あるUseShellExecuteがfalseの場合は、

、WORKINGDIRECTORYプロパティは、実行可能ファイルを検索するために使用されていません。代わりに、それが開始され、新しいプロセスのコンテキスト内でのみ意味を持つプロセスによって使用されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top