Je démarre un nouveau processus dans un service .net et exécute winrar dans la console. Cela fonctionne très bien pour les dossiers qui n'ont pas une grande quantité de fichiers et de fichiers individuels, mais lors de l'archivage de gros dossiers, le processus semble s'arrêter à un moment donné. Je dis qu'il semble arrêter parce queLe processus se termine de manière inattendue
- L'archive est pas terminée quand je reçois la sortie arrière
- Le processus principal déclenchement de la raring du dossier commence à nouveau
Voici la pièce de code qui exécute le processus:
Private Sub log(text As String)
IO.File.AppendAllText("log.txt", text)
End Sub
Private Sub SortOutputHandler(sendingProcess As Object, _
outLine As DataReceivedEventArgs)
If Not String.IsNullOrEmpty(outLine.Data) Then
numOutputLines += 1
log(Environment.NewLine & "[" _
& numOutputLines.ToString() & "] - " _
& outLine.Data)
End If
End Sub
Private Function RunCmd(ParamArray commands As String()) As String
Try
If Not sortOutput Is Nothing Then
sortOutput.Length = 0
End If
Dim returnvalue As String = String.Empty
Dim info As New ProcessStartInfo("cmd")
info.UseShellExecute = False
info.RedirectStandardInput = True
info.RedirectStandardOutput = True
info.CreateNoWindow = True
Using process__1 As Process = Process.Start(info)
AddHandler process__1.OutputDataReceived, AddressOf SortOutputHandler
process__1.BeginOutputReadLine()
Using sw As StreamWriter = process__1.StandardInput
For Each command As String In commands
sw.WriteLine("chcp 65001")
sw.WriteLine(command)
log(command)
Next
sw.Close()
End Using
process__1.WaitForExit()
End Using
returnvalue = sortOutput.ToString
info = Nothing
Return returnvalue
Catch ex As Exception
Return Nothing
End Try
End Function
Private Sub zip(destinationFolder As String, outputFile As String, sourceItem As String)
Dim results As String = RunCmd("rar.exe u """ & destinationFolder & outputFile & """ -m3 -w" & workingDir & " """ & sourceItem & """ ")
End Sub
ce que je reçois en tant que sortie est ce que l'on pouvait s'y attendre lors de l'exécution rar de la ligne de commande, mais il juste extrémités au cours de l'archivage:
[3945] - Adding \\servername\path1 51% OK
[3946] - Adding \\servername\path2 51%
[3947] - C:\Windows\system32>
L'archive est incomplète et System.IO. exception est levée dans le bloc principal du service se plaindre il ne peut pas trouver une partie d'un chemin (un des dossiers enfants de la source passée à la ligne de commande)
Je me demande si la lecture asynchrone de la sortie est correct? Il me semble que c'est la sortie ligne par ligne dans le fichier journal, mais j'ai eu le même problème (bien que je ne pouvais pas avoir les mêmes journaux) quand je lisais la sortie de manière synchrone.
Merci
Ceci est une version légèrement réduite du code, il y a un appel supplémentaire dans cette capture pour enregistrer l'exception. Il n'y a pas d'exception dans cette partie du code essentiellement, la seule exception que je reçois est dans le bloc principal de mon service qui appelle le zip Sub. Puisque la seule raison pour laquelle la partie principale du service est répétée est parce que le RAR ne se termine pas en premier lieu, je pense que cela n'a probablement rien à voir avec ça. – iasonas