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
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
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 :
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
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.
Partager