32位win7环境下C#操作CMD执行ftp会卡死,WIN10就可以正常运行求解决

qq_28411335 2018-02-12 07:23:52
在win7 32位系统的电脑上写了一个程序 通过调用cmd远程连接ftp ,一运行就卡死。
CMD手动输入FTP可以正常执行,就是不能用C#写的程序执行FTP,但是程序可以dir等其他本地操作命令。
代码如下:
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false; //关闭Shell的使用
p.StartInfo.RedirectStandardInput = true; //重定向标准输入
p.StartInfo.RedirectStandardOutput = true; //重定向标准输出
p.StartInfo.RedirectStandardError = true; //重定向错误输出
p.StartInfo.CreateNoWindow = true;//创建窗口 false是开启窗口
p.Start();


p.StandardInput.WriteLine("ftp");
p.StandardInput.WriteLine("bye");
p.StandardInput.WriteLine("exit");
p.StandardInput.AutoFlush = true;

StreamReader reader = p.StandardOutput;

p.WaitForExit();
p.Dispose();
我试过所有我能想到的办法,甚至包括重做系统,依然没有用,哪位大神能帮我解决下?
...全文
829 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋的红果实 2018-02-15
  • 打赏
  • 举报
回复
引用 4 楼 qq_28411335 的回复:
[quote=引用 2 楼 qq_28411335 的回复:] [quote=引用 1 楼 From_TaiWan 的回复:] 会不会是命令提交太快,毕竟,执行这些语句,相邻两条语句相隔的时间极短 尝试在这些语句间sleep p.StandardInput.WriteLine("ftp"); thread.sleep(3000); p.StandardInput.WriteLine("bye"); ....... p.StandardInput.WriteLine("exit"); ........ p.StandardInput.AutoFlush = true; 测试,若真是这个问题,可以考虑用task数组,await方式处理
刚才又试了一下 按照你的方法 等了3秒 ftp命令能够执行 但是无法执行open 命令 如果执行ftp+ip的话 不管等多少秒还是卡死[/quote]你的IP是不是可以连接到服务器?还有,端口是不是可用?
sexfio 2018-02-13
  • 打赏
  • 举报
回复
生成一个批处理文件再执行就是了
公西雒 2018-02-13
  • 打赏
  • 举报
回复
引用 5 楼 qq_28411335 的回复:
[quote=引用 3 楼 danding_ge 的回复:] p.StartInfo.CreateNoWindow = true;//创建窗口 false是开启窗口 这一句改成false,看下具体执行后的命令行数据。
换成了开启后 cmd中是没有任何显示的 只有一个光标在闪动 并且只有我关闭了CMD 命令才能继续向后执行 cmd返回的内容可以抓取到,我把抓取到的内容投到了textbox中,抓取内容是空,因为程序到ftp + ip 这一块就直接卡死了 无法抓取出其中的内容 [/quote] 具体原因不太清楚,建议改成这样

p.StandardInput.WriteLine("ftp&bye&exit");
//向标准输入写入要执行的命令。这里使用&是批处理命令的符号,表示前面一个命令不管是否执行成功都执行后面(exit)命令,如果不执行exit命令,后面调用ReadToEnd()方法会假死
//同类的符号还有&&和||前者表示必须前一个命令执行成功才会执行后面的命令,后者表示必须前一个命令执行失败才会执行后面的命令
  • 打赏
  • 举报
回复
其实我有问题,明明C#有封装好的异步Ftp类你不用非要用CMD这种东西的原因是什么?
qq_28411335 2018-02-13
  • 打赏
  • 举报
回复
引用 3 楼 danding_ge 的回复:
p.StartInfo.CreateNoWindow = true;//创建窗口 false是开启窗口 这一句改成false,看下具体执行后的命令行数据。
换成了开启后 cmd中是没有任何显示的 只有一个光标在闪动 并且只有我关闭了CMD 命令才能继续向后执行 cmd返回的内容可以抓取到,我把抓取到的内容投到了textbox中,抓取内容是空,因为程序到ftp + ip 这一块就直接卡死了 无法抓取出其中的内容
qq_28411335 2018-02-13
  • 打赏
  • 举报
回复
引用 2 楼 qq_28411335 的回复:
[quote=引用 1 楼 From_TaiWan 的回复:] 会不会是命令提交太快,毕竟,执行这些语句,相邻两条语句相隔的时间极短 尝试在这些语句间sleep p.StandardInput.WriteLine("ftp"); thread.sleep(3000); p.StandardInput.WriteLine("bye"); ....... p.StandardInput.WriteLine("exit"); ........ p.StandardInput.AutoFlush = true; 测试,若真是这个问题,可以考虑用task数组,await方式处理
刚才又试了一下 按照你的方法 等了3秒 ftp命令能够执行 但是无法执行open 命令 如果执行ftp+ip的话 不管等多少秒还是卡死
公西雒 2018-02-13
  • 打赏
  • 举报
回复
p.StartInfo.CreateNoWindow = true;//创建窗口 false是开启窗口 这一句改成false,看下具体执行后的命令行数据。
qq_28411335 2018-02-12
  • 打赏
  • 举报
回复
引用 1 楼 From_TaiWan 的回复:
会不会是命令提交太快,毕竟,执行这些语句,相邻两条语句相隔的时间极短 尝试在这些语句间sleep p.StandardInput.WriteLine("ftp"); thread.sleep(3000); p.StandardInput.WriteLine("bye"); ....... p.StandardInput.WriteLine("exit"); ........ p.StandardInput.AutoFlush = true; 测试,若真是这个问题,可以考虑用task数组,await方式处理
不是这个问题,我只是执行ftp 并没有写地址 应该是秒回,而且我在笔记本电脑上能够顺利执行联结、下载和结束命令,移植到i5的win7 台式机上 只是一个ftp命令就直接卡死,不应该吧
秋的红果实 2018-02-12
  • 打赏
  • 举报
回复
会不会是命令提交太快,毕竟,执行这些语句,相邻两条语句相隔的时间极短 尝试在这些语句间sleep p.StandardInput.WriteLine("ftp"); thread.sleep(3000); p.StandardInput.WriteLine("bye"); ....... p.StandardInput.WriteLine("exit"); ........ p.StandardInput.AutoFlush = true; 测试,若真是这个问题,可以考虑用task数组,await方式处理

111,094

社区成员

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

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

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