在下面的代码中,每当我发送任何命令(如 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))