Frage

Ich habe auf die Automatisierung unserer Build-Prozesse gearbeitet und wollte mit einem schmerzlos zu entwickeln, um Unit-Tests in regelmäßigen Abständen ausgeführt werden. Zu diesem Zweck habe ich zusammen eine einfache Anwendung geworfen, die die Projektdateien und bereitet eine Liste von Lösungen Test untersucht. Der Prototyp arbeitet, dass die Tests mit den erwarteten Ergebnissen ausgeführt werden, aber sobald ich versuche, meine Ausgabe der App Bomben auf dem Process.Start Anruf zu umleiten, beschweren, dass eine Datei nicht gefunden werden konnte.

Ich habe versucht, mehrere Iterationen auf, was ich an anderer Stelle getan gesehen, darunter mehrere Beiträge hier, aber ich habe noch diese richtig an die Arbeit zu machen.

Das funktioniert:

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

Das funktioniert nicht:

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: Das System kann die angegebene Datei nicht finden    bei System.Diagnostics.Process.StartWithCreateProcess (Processstartinfo)    bei System.Diagnostics.Process.Start () ... bla bla bla "

Alle Vorschläge zur Lösung dieser Verwendung dieses Modells würde geschätzt.

War es hilfreich?

Lösung

UseShellExecute bewirkt, dass die Datei in verschiedenen Orten gesucht werden.

MSDN :

Die Working Eigenschaft verhält sich anders, wenn UseShellExecute gilt als wenn UseShellExecute falsch ist. Wenn UseShellExecute ist wahr, die Working Eigenschaft gibt den Speicherort der ausführbaren Datei. Wenn Working eine leere Zeichenfolge ist, wird das aktuelle Verzeichnis versteht die ausführbare Datei enthalten.

Wenn UseShellExecute falsch ist, wird die Working Eigenschaft nicht verwendet, um die ausführbare Datei zu finden. Stattdessen wird es durch das Verfahren verwendet, das gestartet wird, und hat nur Sinn im Rahmen des neuen Verfahrens.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top