【发布时间】:2012-10-10 13:39:19
【问题描述】:
在以下代码中,每当我发送任何命令(如 dir 或任何其他命令)时,此函数都会卡在 while 循环中。 我希望每次发送命令时命令提示符的输出都可以在执行命令后不关闭进程的情况下执行。
public void shell(String cmd)
{
ProcessStartInfo PSI = new ProcessStartInfo();
PSI.FileName = "c:\\windows\\system32\\cmd.exe";
PSI.RedirectStandardInput = true;
PSI.RedirectStandardOutput = true;
PSI.RedirectStandardError = true;
PSI.UseShellExecute = false;
Process p = Process.Start(PSI);
StreamWriter CSW = p.StandardInput;
StreamReader CSR = p.StandardOutput;
CSW.WriteLine(cmd);
CSW.Flush();
while(!(CSR.EndOfStream))
{
Console.WriteLine(CSR.ReadLine());
}
CSR.Close();
}
以下是完整代码:-
namespace ConsoleApplication8
{
class Program
{
public static void shell(String cmd)
{
ProcessStartInfo PSI = new ProcessStartInfo();
PSI.FileName = "c:\\windows\\system32\\cmd.exe";
PSI.RedirectStandardInput = true;
PSI.RedirectStandardOutput = true;
PSI.RedirectStandardError = true;
PSI.UseShellExecute = false;
Process p = Process.Start(PSI);
StreamWriter CSW = p.StandardInput;
StreamReader CSR = p.StandardOutput;
CSW.WriteLine(cmd);
CSW.Flush();
while (!(CSR.EndOfStream))
{
Console.WriteLine(CSR.ReadLine());
}
CSR.Close();
}
static void Main(string[] args)
{
string cmd="";
while (cmd != "exit")
{
cmd=Console.ReadLine();
shell(cmd);
}
}
}
}
目的 --> 我想创建一个程序,让用户可以访问执行命令提示符的命令。上面的程序每次发送一些命令时都会创建 cmd.exe 进程。但这不是一个大问题。我可以轻松解决这个问题。主要问题是每次我发送命令时程序都会卡在 while (!(CSR.EndOfStream))
【问题讨论】:
-
你为什么要使用流?什么是目的?发布整个代码并查看示例msdn.microsoft.com/en-us/library/…
-
有一个类似的问题处理这个问题。 stackoverflow.com/questions/2767496/…
-
考虑将结果写入文件,然后读取文件。诀窍是知道命令的输出何时完成。
标签: c#