Bonjour à tous,

J'ai un programme VB.NET de type Service Windows qui est amené à exécuter un programme externe.
Ce programme externe peut être amené à créer un fichier de log.


Curieusement, quand j'utilise ce type de méthode, le programme externe s'exécute quand il n'y a pas de log à créer, mais plante quand il doit créer une log

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
Dim InfosPostTraitement As New ProcessStartInfo
Dim PostTraitement As New Process
 
 'Paramétrage du traitement
 
InfosPostTraitement.FileName = Programme
 
InfosPostTraitement.WindowStyle = ProcessWindowStyle.Normal
InfosPostTraitement.RedirectStandardOutput = True
InfosPostTraitement.UseShellExecute = False
 
'Lance le traitement
 
PostTraitement = Process.Start(InfosPostTraitement)

Mais par contre, si j'utilise ce code, cela marche dans les deux cas

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Shell(Programme, AppWinStyle.Hide, True)

Le problème c'est que je n'aime pas la commande Shell, parce que je ne peut pas récupérer les traces de l'exécution, ni maitriser l'exécution du programme.
Comme je peux le faire avec la 1ère méthode :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
PostTraitement.WaitForExit(DelaisMaximumExec)
 
If PostTraitement.HasExited = False Then
 
   If PostTraitement.Responding Then
        PostTraitement.CloseMainWindow()
        PostTraitement.Kill()
   Else
        PostTraitement.Kill()
   End If
 
End If
 
RetourCommande = PostTraitement.StandardOutput.ReadToEnd

Je pense que la clé se joue sur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
InfosPostTraitement.UseShellExecute = False
Mais je ne peux pas mettre la valeure True sans recevoir une exception me disant que la valeure true est incompatible avec la récupération de l'Output.


Avez-vous une idée ou un conseil ?

PS : Mon service windows est exécuté avec un utilisateur administrateur de la machine et le chemin du programme et de fichier de log sont corrects.