C# 如何执行需要用户交互的隐藏进程而不阻塞?
请不要在阅读前标记为重复。 在搜索了很多谷歌搜索之后,我发现了很多代码。所有的代码都可以,但我的问题是多一点。 假设,我可以使用下面的代码执行C# 如何执行需要用户交互的隐藏进程而不阻塞?,c#,.net,cmd,command,C#,.net,Cmd,Command,请不要在阅读前标记为重复。 在搜索了很多谷歌搜索之后,我发现了很多代码。所有的代码都可以,但我的问题是多一点。 假设,我可以使用下面的代码执行'dir'命令,这将为我提供完美的输出: static void Main(string[] args) { var str=ExecuteCommand("/c dir"); //var str=ExecuteCommand("/c chkdsk C: /f/r/x"); MessageBox.Show(str);
'dir'
命令,这将为我提供完美的输出:
static void Main(string[] args)
{
var str=ExecuteCommand("/c dir");
//var str=ExecuteCommand("/c chkdsk C: /f/r/x");
MessageBox.Show(str);
}
static string ExecuteCommand(string cmd)
{
Process proc = new Process();
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.Arguments = cmd;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
string output = proc.StandardOutput.ReadToEnd();
return output;
}
但是,当我运行这个命令
“/c chkdsk c:/f/r/x”
时,没有输出,因为它等待用户输入(y/n)。我想查看输出并从C代码发送y或n,而不是通过cmd控制台窗口。WinForms应用程序?您使用(想要使用)哪种UI元素来显示控制台输出?@elgonzo:winform或console,我只需要代码。它可以是messabebox或控制台窗口。您需要重定向标准输入订阅事件,以获取启动进程的控制台输出(即“cmd/c…”)。请注意,您需要调用流程对象(在调用Start()之前),否则事件将不会触发。关于输入,请参见上面威尔评论中的MSDN链接…@elgonzo:我也尝试了OutputDataReceived。这不能解决我的问题。它等待用户输入。我的意思和我描述的问题一样process.ErrorDataReceived+=新的DataReceivedEventHandler(OutputHandler);process.OutputDataReceived+=新的DataReceivedEventHandler(OutputHandler2);'