2010-11-23 3 views
2

J'essaie d'exécuter un fichier exe via C# .net en utilisant un processus. Il ne parvient pas à s'exécuter en renvoyant l'exception suivante:Démarrage d'un processus ne fonctionnant pas dans mon service Windows

System.InvalidOperationException: Aucun processus n'est associé à cet objet. à System.Diagnostics.Process.EnsureState (état Etat) à System.Diagnostics.Process.EnsureState (état de l'Etat) à System.Diagnostics.Process.GetProcessHandle (accès Int32, Boolean throwIfExited) à System.Diagnostics.Process. WaitForExit (millisecondes Int32) à System.Diagnostics.Process.WaitForExit() à VideoHandlingWinService.VideoHandlingService.ConvertVideoToFlv (String SavePath, String WithOutExt, String InputFile, String spath, Int32 VideoQueueId) à VideoHandlingWinService.VideoHandlingService.VideoHandling (String VideoName, Chaîne SavePath, Chaîne InputFile, Chaîne WithOutExt, Chaîne spath, Int32 VideoQueueId, Chaîne VideoDescription, Int32 RegisteredUserId, Int32 CategoryId, Chaîne VideoTitle) à VideoHandlingWinService.V ideoHandlingService.StartHandlingVideo() à VideoHandlingWinService.VideoHandlingService.OnStart (String [] args)

Mon code pour démarrer le processus est le suivant:

Toute personne s'il vous plaît me dire
Process proc = new Process(); 
string spath = AppDomain.CurrentDomain.BaseDirectory.ToString(); 

try 
{ 
    proc.StartInfo.FileName = spath + "\\ffmpeg\\ffmpeg.exe"; 
    proc.StartInfo.Arguments = FilArgs; 
    proc.StartInfo.UseShellExecute = false; 
    proc.StartInfo.CreateNoWindow = false; 
    proc.StartInfo.RedirectStandardOutput = true; 
    proc.StartInfo.RedirectStandardError = true; 

    proc.Start(); 

    string StdOutVideo = proc.StandardOutput.ReadToEnd(); 
    string StdErrVideo = proc.StandardError.ReadToEnd();    
} 
catch { } 
finally 
{ 
    proc.WaitForExit(); 
    proc.Close(); 
} 

comment faire dans le service de Windows. Aussi, je suis en cours d'exécution du service Windows comme compte local et j'espère qu'il n'y a pas de problème de permission pour l'exe.

+2

Vous avez un bloc catch vide. Supprimez-le ou ajoutez-y un mot de passe afin de voir ce qui se passe réellement. –

+0

Peut-être que cela signifie que votre capture vide a avalé une exception et que le processus n'a jamais été exécuté, expliquant le message d'erreur ... – wj32

Répondre

0

Je pense que l'erreur se produit dans

proc.WaitForExit(); 

Êtes-vous sûr ffmpeg n'est pas exécuté?

Selon MSDN

Le WaitForExit()()() surcharge est utilisé pour fabriquer le fil courant attendre jusqu'à ce que le processus associé de se termine. Cette méthode indique au composant de processus d'attendre une durée infinie pour le processus et pour quitter les gestionnaires d'événements.

et je suppose que vous êtes au moment où vous êtes dans finally() ffmpeg a déjà quitté.

+0

put proc.WaitForExit(); proc.Close(); après proc.start() et vérifier ce que hppens – Shoban

+0

L'exception était due à mon chemin.Pour Windows service je ne peux pas utiliser le chemin racine car il travaille à l'extérieur. Maintenant, je me suis débarrassé de l'exception en donnant le chemin physique complet pour spath. – Harun

1

utiliser Quoi qu'il en soit System.IO.Path.Combine(path, "ffmpeg\\ffmpeg.exe")

+0

L'exception était due à mon chemin.Pour Windows service je ne peux pas utiliser le chemin racine car il travaille à l'extérieur. Maintenant, je me suis débarrassé de l'exception en donnant le chemin physique complet pour spath. – Harun

Questions connexes