C# 脚本完成后PHP进程不退出

C# 脚本完成后PHP进程不退出,c#,php,webserver,C#,Php,Webserver,我正在用C#开发一个自定义Web服务器。我正在调用php-chi.exe。我的代码如下: System.Diagnostics.Process proc = new System.Diagnostics.Process(); string sOutput = ""; proc.EnableRaisingEvents = false; proc.StartInfo.FileName = "php/php-cgi.exe"; proc.StartInfo.Arguments = "-f " +

我正在用C#开发一个自定义Web服务器。我正在调用php-chi.exe。我的代码如下:

System.Diagnostics.Process proc = new System.Diagnostics.Process();
string sOutput = "";

proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = "php/php-cgi.exe";

proc.StartInfo.Arguments = "-f " + filePath + " " + queryString;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;

proc.Start();

StreamReader hOutput = proc.StandardOutput;

proc.WaitForExit(2000);

if (proc.HasExited)
            return hOutput.ReadToEnd();

return "Web Server attempted to call PHP, however the call has timedout. output = " +hOutput.ReadToEnd();
当我将一个小于一定大小的php文件传递给它时,这对我来说是非常好的。但是如果php文件大于4或5kb,php进程在完成时不会结束,导致代码挂起,直到超时2000ms。我做错什么了吗? 超时时的输出返回我试图获取的完整HTML。只是这个过程还没有结束,它必须等待

我已经在谷歌搜索了大约一个小时,但我找不到它为什么这么做


谢谢你的帮助:我自己解决了。在进一步挖掘之后,我意识到如果标准输出流变满,它将停止。所以在最后,我在处理流的过程中不断地读取它。我的最终代码如下所示,工作非常完美:

System.Diagnostics.Process proc = new System.Diagnostics.Process();
string sOutput = "";

proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = "php/php-cgi.exe";

proc.StartInfo.Arguments = "-f " + filePath + " " + queryString;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;

proc.Start();

StreamReader hOutput = proc.StandardOutput;

Stopwatch timeout = new Stopwatch();
timeout.Start();

string buffer = "";
int timeoutMS = 2000;
while (timeout.ElapsedMilliseconds < timeoutMS)
{
    buffer += hOutput.ReadToEnd();
    if (proc.HasExited)
    {
        break;
    }
}
if (timeout.ElapsedMilliseconds >= timeoutMS)
{
    return "Web Server attempted to call PHP, however the call has timedout.";
}

return buffer;
System.Diagnostics.Process proc=new System.Diagnostics.Process();
字符串sOutput=“”;
proc.EnableRaisingEvents=false;
proc.StartInfo.FileName=“php/php cgi.exe”;
proc.StartInfo.Arguments=“-f”+文件路径+”+查询字符串;
proc.StartInfo.RedirectStandardOutput=true;
proc.StartInfo.UseShellExecute=false;
proc.StartInfo.CreateNoWindow=true;
proc.Start();
StreamReader hOutput=proc.StandardOutput;
秒表超时=新秒表();
timeout.Start();
字符串缓冲区=”;
int timeoutMS=2000;
while(timeout.elapsedmillesons=超时毫秒)
{
return“Web服务器试图调用PHP,但调用有timedout。”;
}
返回缓冲区;