使用进程通过c#.net执行exe文件时,windows服务无法启动
我正在使用windows服务执行使用进程通过c#.net执行exe文件时,windows服务无法启动,c#,windows-services,C#,Windows Services,我正在使用windows服务执行ffmpeg.exe以转换视频文件。我通过启动c#.net中的进程来实现这一点。问题是 我在windows服务的OnStart()中的代码如下: FilArgs = string.Format("-i {0} -ar 22050 -qscale 1 {1}", InputFile, OutputFile); Process proc; proc = new Process(); try { proc.StartInfo.FileName = spath
ffmpeg.exe
以转换视频文件。我通过启动c#.net中的进程来实现这一点。问题是
我在windows服务的OnStart()中的代码如下:
FilArgs = string.Format("-i {0} -ar 22050 -qscale 1 {1}", InputFile, OutputFile);
Process proc;
proc = new Process();
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;
eventLog1.WriteEntry("Going to start process of convertion");
proc.Start();
string StdOutVideo = proc.StandardOutput.ReadToEnd();
string StdErrVideo = proc.StandardError.ReadToEnd();
eventLog1.WriteEntry("Convertion Successful");
eventLog1.WriteEntry(StdErrVideo);
}
catch (Exception ex)
{
eventLog1.WriteEntry("Convertion Failed");
eventLog1.WriteEntry(ex.ToString());
}
finally
{
proc.WaitForExit();
proc.Close();
}
如上所述,当我尝试转换大型视频文件时(当文件大小>14MB时,我遇到了这种情况),服务无法启动,并且处于“启动”状态
ffmpeg在直接通过命令提示符运行时,也适用于较大的文件
任何人请告诉我如何解决这个问题…这很糟糕,因为
onstart()
应该只为worker循环启动一个后台线程OnStart()
应该立即返回,因此不需要在其中执行耗时的工作
Windows等待OnStart()在超时时间内返回,如果它没有返回,将终止它
基本上,您可以在其中开始一个线程:
private Thread _workerThread;
private bool _closing = false;
... OnStart(...)
{
_workerThread = new Thread(new ThreadStart(Work));
_workerThread .Start();
}
private void Work()
{
while(!_closing)
{
// do the processing if there is work otherwise sleep for say 10 seconds
}
}
... OnStop(...)
{
_closing = true;
_workerThread.Abort()
}
这是不好的,因为
onstart()
应该只为辅助循环启动后台线程OnStart()
应该立即返回,因此不需要在其中执行耗时的工作
Windows等待OnStart()在超时时间内返回,如果它没有返回,将终止它
基本上,您可以在其中开始一个线程:
private Thread _workerThread;
private bool _closing = false;
... OnStart(...)
{
_workerThread = new Thread(new ThreadStart(Work));
_workerThread .Start();
}
private void Work()
{
while(!_closing)
{
// do the processing if there is work otherwise sleep for say 10 seconds
}
}
... OnStop(...)
{
_closing = true;
_workerThread.Abort()
}
谢谢你的答复。。但我仍然遇到了耗时的文件操作问题。在您提到的通过线程执行函数之后,现在服务正常启动。但问题是我的功能没有完成。当我检查我的事件日志时,它显示了我在proc.Start()之前所做的日志;(即,“将开始转换过程”)。如何解决此问题?服务问题现已解决,原始问题已得到回答。现在,您似乎在处理数据时遇到了另一个问题,因此我建议您创建一个没有服务内容的新问题。我不建议更新这个问题,因为它会污染它。谢谢你的回答。。但我仍然遇到了耗时的文件操作问题。在您提到的通过线程执行函数之后,现在服务正常启动。但问题是我的功能没有完成。当我检查我的事件日志时,它显示了我在proc.Start()之前所做的日志;(即,“将开始转换过程”)。如何解决此问题?服务问题现已解决,原始问题已得到回答。现在,您似乎在处理数据时遇到了另一个问题,因此我建议您创建一个没有服务内容的新问题。我不建议更新这个问题,因为它会污染它。