http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 82288|回复: 39
打印 上一主题 下一主题

[Winform] C#执行CMD命令并接收返回结果的实现方法—源码下载

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-20 16:48:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这就像是我们平时最常用的ping www.sufeinet.com -n 2 或者是dir
等命令
那么如果正常情况下我们是Cmd 然后在黑屏里执行,如果在C#代码里应该怎么写呢
其实也很简单下面先来看看效果吧

打包下载 AutoApk.zip (22.2 KB, 下载次数: 2853)
一下来看看代码也很简单的
[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Diagnostics;

namespace AutoApk
{
    /// <summary>
    /// Cmd 的摘要说明。
    /// </summary>
    public class Cmd
    {
        private Process proc = null;
        /// <summary>
        /// 构造方法
        /// </summary>
        public Cmd()
        {
            proc = new Process();
        }
        /// <summary>
        /// 执行CMD语句
        /// </summary>
        /// <param name="cmd">要执行的CMD命令</param>
        public string RunCmd(string cmd)
        {
            proc.StartInfo.CreateNoWindow = true;
            proc.StartInfo.FileName = "cmd.exe";
            proc.StartInfo.UseShellExecute = false;
            proc.StartInfo.RedirectStandardError = true;
            proc.StartInfo.RedirectStandardInput = true;
            proc.StartInfo.RedirectStandardOutput = true;
            proc.Start();
            proc.StandardInput.WriteLine(cmd);
            proc.StandardInput.WriteLine("exit");
            string outStr = proc.StandardOutput.ReadToEnd();
            proc.Close();
            return outStr;
        }
        /// <summary>
        /// 打开软件并执行命令
        /// </summary>
        /// <param name="programName">软件路径加名称(.exe文件)</param>
        /// <param name="cmd">要执行的命令</param>
        public void RunProgram(string programName, string cmd)
        {
            Process proc = new Process();
            proc.StartInfo.CreateNoWindow = true;
            proc.StartInfo.FileName = programName;
            proc.StartInfo.UseShellExecute = false;
            proc.StartInfo.RedirectStandardError = true;
            proc.StartInfo.RedirectStandardInput = true;
            proc.StartInfo.RedirectStandardOutput = true;
            proc.Start();
            if (cmd.Length != 0)
            {
                proc.StandardInput.WriteLine(cmd);
            }
            proc.Close();
        }
        /// <summary>
        /// 打开软件
        /// </summary>
        /// <param name="programName">软件路径加名称(.exe文件)</param>
        public void RunProgram(string programName)
        {
            this.RunProgram(programName, "");
        }
    }
}

调用代码如下
[C#] 纯文本查看 复制代码
Cmd c = new Cmd();
            richTextBox1.Text = c.RunCmd(txtCmd.Text.Trim());

好了有这个方法我们以后就可以很容易的实现一些功能了,
而不需要再费很大力去热行一些操作,比如我关机
可以直接执行命令
shutdown -s -t 3600 -c "想要显示的注释" -f

各参数的意思:-s 动作为关机
              -t 3600   延迟3600秒关机
              -c "想要显示的注释"
                        -f  关机时强制关闭所有程序而不显示任何警告

如果你想要更多命令直接输入Help
效果如下
  1. Microsoft Windows [版本 6.1.7601]
  2. 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

  3. E:\Sufei\itemcode\AutoApk\AutoApk\bin\Debug>Help
  4. 有关某个命令的详细信息,请键入 HELP 命令名
  5. ASSOC          显示或修改文件扩展名关联。
  6. ATTRIB         显示或更改文件属性。
  7. BREAK          设置或清除扩展式 CTRL+C 检查。
  8. BCDEDIT        设置启动数据库中的属性以控制启动加载。
  9. CACLS          显示或修改文件的访问控制列表(ACL)。
  10. CALL           从另一个批处理程序调用这一个。
  11. CD             显示当前目录的名称或将其更改。
  12. CHCP           显示或设置活动代码页数。
  13. CHDIR          显示当前目录的名称或将其更改。
  14. CHKDSK         检查磁盘并显示状态报告。
  15. CHKNTFS        显示或修改启动时间磁盘检查。
  16. CLS            清除屏幕。
  17. CMD            打开另一个 Windows 命令解释程序窗口。
  18. COLOR          设置默认控制台前景和背景颜色。
  19. COMP           比较两个或两套文件的内容。
  20. COMPACT        显示或更改 NTFS 分区上文件的压缩。
  21. CONVERT        将 FAT 卷转换成 NTFS。您不能转换
  22.                当前驱动器。
  23. COPY           将至少一个文件复制到另一个位置。
  24. DATE           显示或设置日期。
  25. DEL            删除至少一个文件。
  26. DIR            显示一个目录中的文件和子目录。
  27. DISKCOMP       比较两个软盘的内容。
  28. DISKCOPY       将一个软盘的内容复制到另一个软盘。
  29. DISKPART       显示或配置磁盘分区属性。
  30. DOSKEY         编辑命令行、调用 Windows 命令并创建宏。
  31. DRIVERQUERY    显示当前设备驱动程序状态和属性。
  32. ECHO           显示消息,或将命令回显打开或关上。
  33. ENDLOCAL       结束批文件中环境更改的本地化。
  34. ERASE          删除一个或多个文件。
  35. EXIT           退出 CMD.EXE 程序(命令解释程序)。
  36. FC             比较两个文件或两个文件集并显示它们之间的不同。
  37. FIND           在一个或多个文件中搜索一个文本字符串。
  38. FINDSTR        在多个文件中搜索字符串。
  39. FOR            为一套文件中的每个文件运行一个指定的命令。
  40. FORMAT         格式化磁盘,以便跟 Windows 使用。
  41. FSUTIL         显示或配置文件系统的属性。
  42. FTYPE          显示或修改用在文件扩展名关联的文件类型。
  43. GOTO           将 Windows 命令解释程序指向批处理程序
  44.                中某个带标签的行。
  45. GPRESULT       显示机器或用户的组策略信息。
  46. GRAFTABL       启用 Windows 在图形模式显示扩展字符集。
  47. HELP           提供 Windows 命令的帮助信息。
  48. ICACLS         显示、修改、备份或还原文件和
  49. 目录的 ACL。
  50. IF             在批处理程序中执行有条件的处理过程。
  51. LABEL          创建、更改或删除磁盘的卷标。
  52. MD             创建一个目录。
  53. MKDIR          创建一个目录。
  54. MKLINK         创建符号链接和硬链接
  55. MODE           配置系统设备。
  56. MORE           逐屏显示输出。
  57. MOVE           将一个或多个文件从一个目录移动到另一个目录。
  58. OPENFILES      显示远程用户为了文件共享而打开的文件。
  59. PATH           为可执行文件显示或设置搜索路径。
  60. PAUSE          停止批处理文件的处理并显示信息。
  61. POPD           还原由 PUSHD 保存的当前目录上一次的值。
  62. PRINT          打印一个文本文件。
  63. PROMPT         改变 Windows 命令提示。
  64. PUSHD          保存当前目录,然后对其进行更改。
  65. RD             删除目录。
  66. RECOVER        从损坏的磁盘中恢复可读取的信息。
  67. REM            记录批处理文件或 CONFIG.SYS 中的注释。
  68. REN            重新命名文件。
  69. RENAME         重新命名文件。
  70. REPLACE        替换文件。
  71. RMDIR          删除目录。
  72. ROBOCOPY       复制文件和目录树的高级实用程序
  73. SET            显示、设置或删除 Windows 环境变量。
  74. SETLOCAL       开始用批文件改变环境的本地化。
  75. SC             显示或配置服务(后台处理)。
  76. SCHTASKS       安排命令和程序在一部计算机上按计划运行。
  77. SHIFT          调整批处理文件中可替换参数的位置。
  78. SHUTDOWN       让机器在本地或远程正确关闭。
  79. SORT           将输入排序。
  80. START          打开单独视窗运行指定程序或命令。
  81. SUBST          将驱动器号与路径关联。
  82. SYSTEMINFO     显示机器的具体的属性和配置。
  83. TASKLIST       显示包括服务的所有当前运行的任务。
  84. TASKKILL       终止正在运行的进程或应用程序。
  85. TIME           显示或设置系统时间。
  86. TITLE          设置 CMD.EXE 会话的窗口标题。
  87. TREE           以图形显示启动器或路径的目录结构。
  88. TYPE           显示文本文件的内容。
  89. VER            显示 Windows 的版本。
  90. VERIFY         告诉 Windows 验证文件是否正确写入磁盘。
  91. VOL            显示磁盘卷标和序列号。
  92. XCOPY          复制文件和目录树。
  93. WMIC           在交互命令外壳里显示 WMI 信息。

  94. 有关工具的详细信息,请参阅联机帮助中的命令行参考。


复制代码


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
沙发
发表于 2013-4-17 09:42:44 | 只看该作者
强烈支持楼主ing……
板凳
发表于 2014-3-24 16:13:02 | 只看该作者
蘇飛啊~~有沒有辦法把控制台的輸出內容實時顯示在窗體的文本框上,而不用等控制台執行完了再顯示。實時輸出感覺體驗更好些
地板
 楼主| 发表于 2014-3-24 20:43:10 | 只看该作者
superai 发表于 2014-3-24 16:13
蘇飛啊~~有沒有辦法把控制台的輸出內容實時顯示在窗體的文本框上,而不用等控制台執行完了再顯示。實時輸出 ...

当然可以,用一个子线程时时获取数据并输出就行了
5
发表于 2014-3-25 09:30:57 | 只看该作者
站长苏飞 发表于 2014-3-24 20:43
当然可以,用一个子线程时时获取数据并输出就行了

根据Process的方法,要等控制台结束才能获取到信息
6
 楼主| 发表于 2014-3-25 09:33:03 | 只看该作者
superai 发表于 2014-3-25 09:30
根据Process的方法,要等控制台结束才能获取到信息

缓存区的信息是可以动态读取的,你可以测试下。
7
发表于 2014-3-25 16:22:29 | 只看该作者
好是挺好但运行ADB的命令有时就卡死或是没有返回不知道什么情况!
8
 楼主| 发表于 2014-3-25 16:31:18 | 只看该作者
中联软件 发表于 2014-3-25 16:22
好是挺好但运行ADB的命令有时就卡死或是没有返回不知道什么情况!

这个只是执行返回,执行成功不成功 ,什么效果暂时看不到,你可以先在Cmd下试试。这是源码,你可以调试看看。
9
发表于 2014-3-25 16:32:59 | 只看该作者
嗯继续调试下
10
发表于 2014-4-4 17:51:32 | 只看该作者
启动文件,还是觉得用StartInfo.Arguments 比较好
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-6-1 20:15

© 2014-2021

快速回复 返回顶部 返回列表