关于c#运行 cmd的问题

kevinless901 2011-05-19 11:14:39
我在做一个c#的mysql数据库备份功能,在cmd下执行命令没问题,放在c#下执行命令 有的计算机备份成功,有的计算机得到了备份文件但是里面是空的 求教!!

cmd下执行的命令:(所有机器都能执行成功)
mysqldump -h192.168.1.158 -P3306 -uroot -pmysql dbName>d:\a.sql
c#中运行cmd的代码:(部分机器执行成功,部分只生成了文件里面没内容)
       Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.StandardInput.WriteLine("mysqldump -h192.168.1.158 -P3306 -uroot -pmysql dbName>d:\a.sql");
p.StandardInput.WriteLine("exit");
p.StandardOutput.ReadToEnd();
p.Close();
...全文
161 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
am 2011-05-19
  • 打赏
  • 举报
回复
加上p。waiteforexit(),试试
kevinless901 2011-05-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 deknight 的回复:]
C# code

string bak = "mysqldump -h192.168.1.158 -P3306 -uroot -pmysql dbName>d:\a.sql";
Process.Start(@"C:\Program Files\MySQL\MySQL Server 5.0\bin\mysql.exe", bak);


直接调用mysql去备,别用cmd
[/Quote]直接调用也没用
xiaodru 2011-05-19
  • 打赏
  • 举报
回复
那是因为你直接执行CMD时,它会等备份完成,而在C#里执行,显然你是在执行两个程序,CMD的备份没完,而你的程序已经让CMD退出
p.StandardInput.WriteLine("mysqldump -h192.168.1.158 -P3306 -uroot -pmysql dbName>d:\a.sql");
p.StandardInput.WriteLine("exit");
在退出前加个sleep等待一下吧,或者取CMD的执行结果再退出
deknight 2011-05-19
  • 打赏
  • 举报
回复

string bak = "mysqldump -h192.168.1.158 -P3306 -uroot -pmysql dbName>d:\a.sql";
Process.Start(@"C:\Program Files\MySQL\MySQL Server 5.0\bin\mysql.exe", bak);

直接调用mysql去备,别用cmd
taolinsen 2011-05-19
  • 打赏
  • 举报
回复
每个命令结束尝试写几个"\n\r",我以前就这样解决的吗,原因不明
kevinless901 2011-05-19
  • 打赏
  • 举报
回复
是的 这些简单操作都是没问题的,我就是找不到我这个问题的原因 关于没备份完就停应该不是 我特别加了断点等了很长时间再结束也是一样结果
deknight 2011-05-19
  • 打赏
  • 举报
回复
你可以尝试下,修改cmd命令,比如copy c:/a.txt d:/
保证每次都成功
kevinless901 2011-05-19
  • 打赏
  • 举报
回复
应该不是备份时间问题,正藏备份大概在1秒的时间,我特别加过sleep1分钟 还是没用的。目前状态时没备份到不是没备份完
deknight 2011-05-19
  • 打赏
  • 举报
回复
另外提个建议,如果库很大,那你需要等很长时间,建议你把CMD的命令做在console程序里,让你的程序调用这个console程序,会好控制一些
deknight 2011-05-19
  • 打赏
  • 举报
回复
那是因为你直接执行CMD时,它会等备份完成,而在C#里执行,显然你是在执行两个程序,CMD的备份没完,而你的程序已经让CMD退出
p.StandardInput.WriteLine("mysqldump -h192.168.1.158 -P3306 -uroot -pmysql dbName>d:\a.sql");
p.StandardInput.WriteLine("exit");
在退出前加个sleep等待一下吧,或者取CMD的执行结果再退出
kevinless901 2011-05-19
  • 打赏
  • 举报
回复
目前为bs系统,在本机用vs调试时可以备份,可是发布出来以后备份出来的文件中没有内容
founderfang 2011-05-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 am 的回复:]
加上p。waiteforexit(),试试
[/Quote]
同意

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧