J'ai travaillé sur l'automatisation de nos processus de construction et je voulais trouver un moyen simple d'exécuter des tests unitaires de façon régulière. À cette fin, j'ai jeté une application simple qui examine les fichiers de projet et prépare une liste de solutions à tester. Le prototype fonctionne en ce sens que les tests sont exécutés avec les résultats attendus, mais dès que j'essaie de rediriger ma sortie, les bombes de l'application sur l'appel Process.Start, se plaignant qu'un fichier n'a pu être trouvé.Process.Start échoue lors de la tentative de redirection de la sortie
J'ai essayé plusieurs itérations sur ce que j'ai vu ailleurs, y compris plusieurs articles ici, mais je n'ai pas encore réussi à le faire fonctionner 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() ... yadda yadda yadda "
Toute suggestion Des solutions pour résoudre ce problème en utilisant ce modèle seraient appréciées. UseShellExecute fait en sorte que le fichier soit recherché à différents endroits.
L'erreur que vous obtenez signifie que 'aFileName' n'a pas été trouvé. – Gonzalo