c#执行dos命令 问题

publicstaticstringCmd(string[]cmd){Processprocess=newProcess();process.StartInfo.File... public static string Cmd(string[] cmd)
{
Process process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.CreateNoWindow = true;
process.Start();
process.StandardInput.AutoFlush = true;
for (int i = 0; i < cmd.Length; i++)
{
process.StandardInput.WriteLine(cmd[i].ToString());
}
process.StandardInput.WriteLine("exit");
string strRst = process.StandardOutput.ReadToEnd();
process.WaitForExit();
process.Close();
return strRst;
}

我执行dos命令安装软件, dos命令执行完之后 软件还在安装 这是怎么回事。还有怎么验证执行dos命令安装软件成功或者失败。
除了用dos命令安装软件之外c#还有什么方法可以执行安装软件 在线等
展开
 我来答
074vexq430
2011-08-27 · TA获得超过261个赞
知道答主
回答量:503
采纳率:0%
帮助的人:296万
展开全部
原因是出现了死锁。由于标准输出流被重定向,而Process.StandardOutput的缓冲大小是有限制的(据说是4k),所以当缓冲满了的时候(执行上面的批处理文件有很多的输出),子进程(cmd.exe)会等待主进程(C# App)读取并释放此缓冲,而主进程由于调用了WaitForExit()方法,则会等待子进程退出,最后形成死锁。

解决办法:
1)修改C#代码,将p.StartInfo.RedirectStandardOutput = true;
改成false,这样所有的输出会在命令行屏幕上直接输出,不会重定向到标准输出流中。

2)修改C#代码,在p.WaitForExit(6000);前添加p.BeginOutputReadLine();或 p.StandardOutput.ReadToEnd();,通过读取输出流,以便释放相应的缓冲。
huangshan4396
2011-08-26 · TA获得超过609个赞
知道小有建树答主
回答量:477
采纳率:90%
帮助的人:192万
展开全部
安装软件不就是运行程序吗?
你现在用c#运行cmd然后再cmd里运行安装程序,你也完全可以直接用C#语句直接创建Process 运行安装程序。为什么非要通过cmd中转?
你如果要执行cmd特有的命令才需要cmd。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式