0

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;
    }
}
4

1 に答える 1

1

私はあなたの解決策と非常によく似た何かをしました-これは私にとってうまく機能しています:

ProcessStartInfo pInfo = new ProcessStartInfo("cmd.exe");
pInfo.FileName = exePath;
pInfo.WorkingDirectory = new FileInfo(exePath).DirectoryName;
pInfo.Arguments = args;
pInfo.CreateNoWindow = false;
pInfo.UseShellExecute = false;
pInfo.WindowStyle = ProcessWindowStyle.Normal;
pInfo.RedirectStandardOutput = true;
Process p = Process.Start(pInfo);
p.OutputDataReceived += p_OutputDataReceived;
p.BeginOutputReadLine();
p.WaitForExit();
// set status based on return code.
if (p.ExitCode == 0) this.Status = StatusEnum.CompletedSuccess;
   else this.Status = StatusEnum.CompletedFailure;

興味深い違いは、WaitForExit()の使用と、場合によってはBeginOutputReadLine()の使用にあるようです。

于 2011-02-25T20:46:12.960 に答える