我正在尝试让PHP解析器运行一个页面,然后将结果返回给我的服务器,但是当我通过我的代码运行命令时,它什么都不返回.我知道命令是正确的,因为如果我用相同的路径手动运行它,它工作正常.继承我的代码:
var p = new Process
{
StartInfo = new ProcessStartInfo("C:\\xampp\\php\\php.exe", path)
{
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true
}
};
var output = new StringWriter();
var error = new StringWriter();
p.OutputDataReceived += (sender, args) => output.WriteLine(args.Data);
p.ErrorDataReceived += (sender, args) => error.WriteLine(args.Data);
p.Start();
p.BeginOutputReadLine();
p.BeginErrorReadLine();
p.WaitForExit();
if (p.ExitCode != 0)
{
throw new Exception(string.Format(
"PHP failed with the following output:{0}{1}",
/* {0} */ Environment.NewLine,
/* {1} */ error.GetStringBuilder().ToString()));
}
var res = output.GetStringBuilder().ToString();
Console.WriteLine(res);
Run Code Online (Sandbox Code Playgroud)
编辑:使用此当前代码,它会在没有输出的代码中抛出异常.
问题是您在程序完成之前正在读取输出.您需要等待程序退出才能处理输出.否则,您将在解析完成之前处理输出.添加以下行.
p.Start();
p.WaitForExit(); // New line
Run Code Online (Sandbox Code Playgroud)
EDIT OP表示他们仍有问题.
尝试删除命令的CMD部分.只需直接运行PHP命令即可.允许创建用于调试目的的窗口也是有益的,这样您就可以看到运行命令时可能出现的任何错误.
小智 5
设置WorkingDirectory路径
var p = new Process
{
StartInfo = new ProcessStartInfo("php", path)
{
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true,
WorkingDirectory = workingDir
}
};
Run Code Online (Sandbox Code Playgroud)