Question

Je travaille sur l'automatisation de nos processus de construction et je voulais trouver un moyen indolore pour exécuter des tests unitaires sur une base régulière. À cette fin, je l'ai jeté ensemble une application simple qui examine les dossiers de projet et prépare une liste de solutions à tester. Le prototype fonctionne en ce que les tests sont exécutés avec les résultats attendus, mais dès que je tente de rediriger ma sortie les bombes app sur l'appel Process.Start, se plaignant qu'un fichier n'a pas pu être trouvé.

Je l'ai essayé plusieurs itérations sur ce que je l'ai vu faire ailleurs, y compris plusieurs postes ici, mais je dois encore que cela fonctionne correctement.

Cela fonctionne:

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

Cela ne fonctionne pas:

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: Le système ne peut pas trouver le fichier spécifié    à System.Diagnostics.Process.StartWithCreateProcess (ProcessStartInfo startInfo)    à System.Diagnostics.Process.Start () ... blah blah blah "

Toutes les suggestions pour résoudre ce en utilisant ce modèle serait apprécié.

Était-ce utile?

La solution

UseShellExecute, le fichier à rechercher dans des endroits différents.

De MSDN :

La propriété WorkingDirectory se comporte différemment lorsque UseShellExecute est vrai que quand UseShellExecute est faux. Lorsque UseShellExecute est vrai, la propriété WorkingDirectory indique l'emplacement de l'exécutable. Si WorkingDirectory est une chaîne vide, le répertoire courant est entendu pour contenir l'exécutable.

Quand UseShellExecute est faux, la propriété WorkingDirectory ne sert pas à trouver l'exécutable. Au lieu de cela, il est utilisé par le processus qui a commencé et n'a de sens que dans le cadre du nouveau processus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top