首先,我对您认为UseShellExecute=false
对您不起作用的原因感兴趣。有没有可能你没有正确使用它?
这是您最好的选择。这适用于 99% 的应用程序:
ProcessStartInfo psi = new ProcessStartInfo
{
FileName = "clingo.exe",
Arguments = "\"Constants.txt\" \"Solver.txt\" \"Nodes.txt\"",
RedirectStandardOutput = true,
UseShellExecute = false
};
using(Process p = Process.Start(psi))
using(Stream s = File.Create("Solved.txt"))
{
p.StandardOutput.CopyTo(s);
p.WaitForExit();
}
这是罕见的应用程序的一个选项,它不喜欢以标准方式传递的 args,但适用于 cmd.exe:
ProcessStartInfo psi = new ProcessStartInfo
{
FileName = "cmd.exe",
RedirectStandardInput = true,
UseShellExecute = false // note this applies to cmd.exe specifically,
// NOT the processes that you start from cmd.exe
};
using(Process p = Process.Start(psi))
{
p.StandardInput.WriteLine("clingo \"Constants.txt\" \"Solver.txt\" \"Nodes.txt\" > \"Solved.txt\"");
p.StandardInput.WriteLine("exit");
p.WaitForExit();
}
您可能还需要重定向 StandardOutput 和 StandardError 才能使这个工作正常——我忘了!