この次のコードでは、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)) でスタックすることです