我找到了如何在C#中打开cmd。
但我只能使用一次Inputstream。
ProcessStartInfo CmdInfo = new ProcessStartInfo();
Process cmd = new Process();
CmdInfo.FileName = @"cmd";
CmdInfo.WindowStyle = ProcessWindowStyle.Hidden;
CmdInfo.CreateNoWindow = true;
CmdInfo.UseShellExecute = false;
CmdInfo.RedirectStandardInput = true;
CmdInfo.RedirectStandardOutput = true;
CmdInfo.RedirectStandardError = true;
cmd.EnableRaisingEvents = false;
cmd.StartInfo = CmdInfo;
cmd.Start();
现在我们可以使用cmd.StandardInput和cmd.StandardOutput。
// Use cmd 1
cmd.StandardInput.WriteLine("cd");
cmd.StandardInput.Close(); // if don't close, I can't get output
Console.WriteLine( cmd.StandardOutput.ReadToEnd() ); // Done!
// Use cmd 2
cmd.StandardInput.WriteLine("cd C:\"); // It will occure ObjectDisposedException
我想解决这个问题。
答案 0 :(得分:2)
我认为你不会对这种方法有所了解。代码是一个提示ProcessStart!这是一个新的过程!在您启动该过程后,它完全独立于您的代码所在的过程,您能够与此新过程进行通信的唯一方法是通过COM或远程处理或其他一些应用程序间通信... MSMQ等。
据我所知,cmd(命令提示符)不提供这些。
我想你会想要研究一下powershell ......
http://www.codeproject.com/Articles/18229/How-to-run-PowerShell-scripts-from-C
等等
答案 1 :(得分:1)
在输入关闭之前,命令shell可执行文件不会处理来自重定向标准输入的命令。
您有三种选择:
如果您选择为每个命令创建一个新进程,请使用cmd.exe的“/ C”命令行开关执行命令,而不是通过标准输入传递它。