【发布时间】:2011-02-25 20:34:09
【问题描述】:
我发现我可以使用 System.Diagnostics.Process 启动进程。我正在尝试使用以下代码,但它不起作用。页面刚刚挂起,我必须重新启动 IIS...
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Diagnostics;
public partial class VideoTest : System.Web.UI.Page
{
List<string> outputLines = new List<string>();
bool exited = false;
protected void Page_Load(object sender, EventArgs e)
{
string AppPath = Request.PhysicalApplicationPath;
Process myProcess = new Process();
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.FileName = AppPath + "\\bin\\ffmpeg.exe";
myProcess.StartInfo.CreateNoWindow = true;
myProcess.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);
myProcess.Exited += new EventHandler(ExitHandler);
myProcess.Start();
while (!exited)
{
// This is bad bad bad bad....
}
litTest.Text = "";
foreach (string line in outputLines)
litTest.Text += line;
}
private void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
outputLines.Add(outLine.Data);
}
// Handle Exited event and display process information.
private void ExitHandler(object sender, System.EventArgs e)
{
exited = true;
}
}
【问题讨论】:
-
也许您应该先从控制台应用程序测试此代码?
-
在您可以捕获 ffmpeg.exe 输出的地方,我的应用程序在调用此 exe 期间会阻塞,并且我没有看到任何输出,Exited 事件触发正常。最近的 ffmpeg 是彩色的,所以我不知道它是否会输出到标准输出?另外,我是否必须从线程启动它?如果你有工作,请分享你的最终解决方案,谢谢。
标签: c# asp.net-2.0 system.diagnostics