C#調用cmd執行

bb_chen 2009-02-26 03:06:56
因原程序是用cmd執行的,先打算使用WinForm界面來運行該程序(cmd還是在後台隱藏運行)
現有如下問題:
1.如何在程序運行期間一直隱藏開啟cmd?
2.如何能夠間端的發命令給cmd。並讀取cmd的顯示結果?
3.如何通過WinForm發送回車鍵給cmd?

謝謝!
...全文
5254 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
JackieLu2004 2009-12-15
  • 打赏
  • 举报
回复
针对上面PING的命令 如何后面跟一个IP 或 WEB地址是可以实现

但是如果我后面再加入了参数 比如 ping 162.135.10.120 -t 这样的话又该如何处理呢?因为执行这个命令后是一只有返回信息了 那该怎么判断它结束 并把信息反馈回WINFORM中呢?
哈哈潜伏哥 2009-03-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhoufoxcn 的回复:]
说明:经常有朋友问如何在C#中运行一个dos命令,并截取输出、输出流的问题,这个问题我以前在Java中实现过,由于在C#中没有遇到过类似的 情况,为了避免每次别人问都要一遍一遍演示的情况,特地做了一个简单的例子,实现在WinForm中ping一个网站,并且将ping的结果显示在一个文本框中。

程序运行情况:
[/Quote]

这个回答是正确的,经过我的测试,目前我已经正常运行了。请按照该楼提供的方法完全可以满足你的要求了。
birdlonger 2009-03-02
  • 打赏
  • 举报
回复
mark ; hen bu cuo de dongxi .
nixiang12 2009-02-28
  • 打赏
  • 举报
回复
很好很强大
不错啊
学习了啊
yeah86 2009-02-28
  • 打赏
  • 举报
回复
学习了
chenyanling_huo 2009-02-28
  • 打赏
  • 举报
回复
难道没有人试过用钩子函数屏蔽系统热键Ctrl + Alt + Delete,还有个shift(除了用注册表外)???
shalen520 2009-02-27
  • 打赏
  • 举报
回复
again


使用windows API, GetStdHandle,ReadConsoleOutput,WriteConsoleInput,GetConsoleScreenBufferInfo等来直接处理控制台缓冲区,不会出现所谓的卡死问题
deyter 2009-02-27
  • 打赏
  • 举报
回复
学习
fanbo 2009-02-27
  • 打赏
  • 举报
回复
很好,很强大。
cppwizard_alvin 2009-02-27
  • 打赏
  • 举报
回复
值得收藏
周公 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 bb_chen 的回复:]
謝謝周公!你的方法很好用。

但相對我的程序有一點還需要改進,請幫忙看看怎麼改!

我在發送一個命令給cmd後,它會處於等待狀態,此時我們需要按回車鍵才能繼續執行。
現在的問題有2個
1.在處於等待狀態時,WinForm界面就不能動,處於假死狀態,這應該如何處理?
2.如何發送回車鍵確認?
謝謝!
[/Quote]
1、对于第一个问题恐怕要采用异步处理了。
2、对于发送回车键确认,因为已经重定向输入输出流了,所以你向输入流发送回车键就可以确认了。

不过,个人感觉第一点要求和第二点要求好像有些冲突。
bb_chen 2009-02-27
  • 打赏
  • 举报
回复
謝謝周公!你的方法很好用。

但相對我的程序有一點還需要改進,請幫忙看看怎麼改!

我在發送一個命令給cmd後,它會處於等待狀態,此時我們需要按回車鍵才能繼續執行。
現在的問題有2個
1.在處於等待狀態時,WinForm界面就不能動,處於假死狀態,這應該如何處理?
2.如何發送回車鍵確認?
謝謝!
leonjun911 2009-02-27
  • 打赏
  • 举报
回复
从6楼学到东西 mark一下
chenyanling_huo 2009-02-27
  • 打赏
  • 举报
回复
如何用钩子函数蔽系统热键Ctrl + Alt + Delete,还有个shift(除了用注册表外)
chenyanling_huo 2009-02-27
  • 打赏
  • 举报
回复
如何用winAPI函数屏蔽系统热键Ctrl + Alt + Delete,还有个shift(除了用注册表外)
wwb82954323 2009-02-27
  • 打赏
  • 举报
回复
学习
bb_chen 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 shalen520 的回复:]
again


使用windows API, GetStdHandle,ReadConsoleOutput,WriteConsoleInput,GetConsoleScreenBufferInfo等来直接处理控制台缓冲区,不会出现所谓的卡死问题
[/Quote]
謝謝!
zjh222 2009-02-26
  • 打赏
  • 举报
回复
这个发布一个月了没有人解决
大家看看
如何用窗体的Load执行如ngen C:\mRelease\myinfoapp.exe的Vs2008的Dos命令呢?注意不是cmd.exe的
否则会出现ngen不是内部命令 !!!


bb_chen 2009-02-26
  • 打赏
  • 举报
回复
用多線程嗎?
bb_chen 2009-02-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhoufoxcn 的回复:]
详细描述地址:C#中运行命令行截取输出流的例子

部分关键代码:
C# codeprivatevoidbtnExecute_Click(objectsender, EventArgs e)
{
tbResult.Text="";
ProcessStartInfo start=newProcessStartInfo("Ping.exe");//设置运行的命令行文件问ping.exe文件,这个文件系统会自己找到//如果是其它exe文件,则有可能需要指定详细路径,如运行winRar.exestart.Arguments=txtCommand.Text;//设置命令…
[/Quote]

謝謝周公!你的方法很好用。

但相對我的程序有一點還需要改進,請幫忙看看怎麼改!

我在發送一個命令給cmd後,它會處於等待狀態,此時我們需要按回車鍵才能繼續執行。
現在的問題有2個
1.在處於等待狀態時,WinForm界面就不能動,處於假死狀態,這應該如何處理?
2.如何發送回車鍵確認?
謝謝!
加载更多回复(16)

110,534

社区成员

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

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

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