Запуск процесса не работает в моей службе Windows - PullRequest
2 голосов
/ 23 ноября 2010

Я пытаюсь выполнить исполняемый файл через c # .net, используя процесс. Не удается выполнить, возвращая следующее исключение:

System.InvalidOperationException: ни один процесс не связан с этим объектом. в System.Diagnostics.Process.EnsureState (состояние штата) в System.Diagnostics.Process.EnsureState (состояние штата) в System.Diagnostics.Process.GetProcessHandle (доступ Int32, логический throwIfExited) в System.Diagnostics.Process.WaitForExit (Int32 миллисекунды) в System.Diagnostics.Process.WaitForExit () at VideoHandlingWinService.VideoHandlingService.ConvertVideoToFlv (String SavePath, String WithOutExt, String InputFile, String spath, Int32 VideoQueueId) at VideoHandlingWinService.VideoHandlingService.VideoHandling (Строка VideoName, Строка SavePath, Строка InputFile, Строка WithOutExt, Строка spath, Int32 VideoQueueId, Строка VideoDescription, Int32 RegisteredUserId, Int32 CategoryId, Строка VideoTitle) на VideoHandlingWinService.VideoHandlingService.StartHandlingVideo () at VideoHandlingWinService.VideoHandlingService.OnStart (String [] args)

Мой код для запуска процесса выглядит следующим образом:

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();
}

Любой, пожалуйста, скажите мне, как сделать это в службе Windows. Кроме того, я запускаю службу windows в качестве локальной учетной записи и надеюсь, что для exe нет проблем с разрешениями.

Ответы [ 2 ]

1 голос
/ 23 ноября 2010

В любом случае используйте System.IO.Path.Combine(path, "ffmpeg\\ffmpeg.exe")

0 голосов
/ 23 ноября 2010

Я думаю, что ошибка происходит в

proc.WaitForExit();

Вы уверены, что ffmpeg не выполняется?

Согласно MSDN

Перегрузка WaitForExit () () () используется для создания текущего потока ждать, пока связанный процесс завершается. Этот метод инструктирует Компонент процесса ждать бесконечно количество времени для процесса и обработчики событий для выхода.

и я думаю, что к тому времени, когда вы находитесь в finally () ffmpeg уже вышел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...