运行DOS程序的问题
代码如下:Process pCmd = new Process();
pCmd.StartInfo.FileName = "cmd.exe";
pCmd.StartInfo.UseShellExecute = false;
pCmd.StartInfo.RedirectStandardInput = true;
pCmd.StartInfo.RedirectStandardOutput = true;
pCmd.StartInfo.RedirectStandardError = true;
pCmd.StartInfo.CreateNoWindow = true;
pCmd.Start();
pCmd.StandardInput.WriteLine("DOS程序");
StreamReader srTemp = pCmd.StandardOutput;
StringBuilder sbTemp = new StringBuilder();
while (true)
{
sbTemp.Remove(0, sbTemp.Length);
sbTemp.Append(srTemp.ReadLine());
richTextBox1.AppendText(sbTemp.ToString() + "\n");
this.Refresh();
}
问题是DOS程序运行结果并未返回。如将pCmd.StartInfo.CreateNoWindow属性改为false,则出现DOS窗口,按任意键后DOS程序运行,并有结果返回。
不知是何原因?如何不显示DOS窗口有能返回运行结果?
--------------------编程问答-------------------- 我试过了,这样没问题啊
ProcessStartInfo si = new ProcessStartInfo("ping", "www.163.com");--------------------编程问答-------------------- 可以直接给dos命令加输出定向符 >> 输出到制定的文本文件中。
si.CreateNoWindow = true;
si.RedirectStandardOutput = true;
si.UseShellExecute = false;
Process p = Process.Start(si);
textBox1.Text = p.StandardOutput.ReadToEnd();
如:dir > a.txt --------------------编程问答-------------------- 原DOS程序执行后会要求键盘输入,但现在连在要求输入前的任何信息都读不到
--------------------编程问答-------------------- 或者问题应该表述为:如何在C#中执行DOS批处理文件,并能重定位输入、输出。 --------------------编程问答--------------------
这个说明你程序肯定有问题,自己漫漫检查把,
--------------------编程问答--------------------
感觉好像与命令是内部或外部命令有关.
因为前时间想获取net use命令的结果也没有成功,但是ping命令却可以.期待此贴有解,从中学习. --------------------编程问答-------------------- protected static void RunDosFun()
{
Process pCmd = new Process();
pCmd.StartInfo.FileName = "cmd.exe";
pCmd.StartInfo.UseShellExecute = false;
pCmd.StartInfo.RedirectStandardInput = true;
pCmd.StartInfo.RedirectStandardOutput = true;
pCmd.StartInfo.RedirectStandardError = true;
pCmd.StartInfo.CreateNoWindow = true;
pCmd.Start();
pCmd.StandardInput.WriteLine("DOS程序");
StreamReader srTemp = pCmd.StandardOutput;
StringBuilder sbTemp = new StringBuilder();
while (srTemp.ReadLine()!= null)
{
sbTemp.Remove(0, sbTemp.Length);
sbTemp.Append(srTemp.ReadLine());
Console.WriteLine(sbTemp.ToString()); //Add output to console
}
}
protected static void GetPingInfo()
{
ProcessStartInfo si = new ProcessStartInfo("ping", "www.163.com");
si.CreateNoWindow = true;
si.RedirectStandardOutput = true;
si.UseShellExecute = false;
Process p = Process.Start(si);
string str = p.StandardOutput.ReadToEnd();
Console.Write(str); //Add output to console
} --------------------编程问答-------------------- 要输入的也没问题啊
ProcessStartInfo si = new ProcessStartInfo("netsh");--------------------编程问答-------------------- 内部DOS命令是可以正常指令,输入、输出重定向也没问题,但我调用的是第三方的DOS程序,该程序的执
si.CreateNoWindow = true;
si.RedirectStandardInput = true;
si.RedirectStandardOutput = true;
si.UseShellExecute = false;
Process p = Process.Start(si);
p.StandardInput.WriteLine("show");
p.StandardInput.WriteLine("exit");
textBox1.Text = p.StandardOutput.ReadToEnd();
行方式为:cmd arg1,其中arg1为参数,实际是保存在cmd所在目录下的一个文件。 --------------------编程问答-------------------- 什么文件?exe么?你先启动cmd,然后在cmd中输入arg1呢?能不能启动?cmd只是个环境,你不要把它也带进去,你不是要启动cmd这个进程 --------------------编程问答-------------------- 你加个si.Arguments=arg1看可以不? --------------------编程问答-------------------- 都试过,还是不行,我在改用多线程试试。 --------------------编程问答-------------------- DOS程序是用devC++开发的,不知会不会有影响?
补充:.NET技术 , C#