C#执行CMD命令并返回结果

  • Post author:
  • Post category:其他


转载:http://iusers.com.cn/post/C-command-and-return-to-the-implementation-of-the-results-CMD

公司要求写一个用cmd的ftp命令上传文件的,写到一半发现一个问题,cmd的ftp命令的密码必须在界面里面输入,不能在程序里面控制。

现在需要换成用协议上传的。

把代码共享。关闭进程是网上找的。运行了cmd要需要关闭cmd进程。

  1. 1.

    private


    void

    button1_Click(

    object

    sender, EventArgs e)
  2. 2. {
  3. 3.

    // 调用代码
  4. 4.

    string

    [] cmd =

    new


    string

    [] {

    “ping 192.168.3.15 -n 1”

    ,

    “ping 192.168.3.16 -n 2”

    };
  5. 5.   MessageBox.Show(Cmd(cmd));
  6. 6.   CloseProcess(

    “cmd.exe”

    );
  7. 7. }
  8. 8.
  9. 9.

    /// <summary>
  10. 10.

    /// 运行CMD命令
  11. 11.

    /// </summary>
  12. 12.

    /// <param name=”cmd”>命令</param>
  13. 13.

    /// <returns></returns>
  14. 14.

    public


    static


    string

    Cmd(

    string

    [] cmd)
  15. 15. {
  16. 16.   Process p =

    new

    Process();
  17. 17.   p.StartInfo.FileName =

    “cmd.exe”

    ;
  18. 18.   p.StartInfo.UseShellExecute =

    false

    ;
  19. 19.   p.StartInfo.RedirectStandardInput =

    true

    ;
  20. 20.   p.StartInfo.RedirectStandardOutput =

    true

    ;
  21. 21.   p.StartInfo.RedirectStandardError =

    true

    ;
  22. 22.   p.StartInfo.CreateNoWindow =

    true

    ;
  23. 23.   p.Start();
  24. 24.   p.StandardInput.AutoFlush =

    true

    ;
  25. 25.

    for

    (

    int

    i = 0; i < cmd.Length; i++)
  26. 26.   {
  27. 27.   p.StandardInput.WriteLine(cmd[i].ToString());
  28. 28.   }
  29. 29.   p.StandardInput.WriteLine(

    “exit”

    );
  30. 30.

    string

    strRst = p.StandardOutput.ReadToEnd();
  31. 31.   p.WaitForExit();
  32. 32.   p.Close();
  33. 33.

    return

    strRst;
  34. 34. }
  35. 35.
  36. 36.

    /// <summary>
  37. 37.

    /// 关闭进程
  38. 38.

    /// </summary>
  39. 39.

    /// <param name=”ProcName”>进程名称</param>
  40. 40.

    /// <returns></returns>
  41. 41.

    public


    static


    bool

    CloseProcess(

    string

    ProcName)
  42. 42. {
  43. 43.

    bool

    result =

    false

    ;
  44. 44.   System.Collections.ArrayList procList =

    new

    System.Collections.ArrayList();
  45. 45.

    string

    tempName =

    “”

    ;
  46. 46.

    int

    begpos;
  47. 47.

    int

    endpos;
  48. 48.

    foreach

    (System.Diagnostics.Process thisProc

    in

    System.Diagnostics.Process.GetProcesses())
  49. 49.   {
  50. 50.   tempName = thisProc.ToString();
  51. 51.   begpos = tempName.IndexOf(

    “(”

    ) + 1;
  52. 52.   endpos = tempName.IndexOf(

    “)”

    );
  53. 53.   tempName = tempName.Substring(begpos, endpos – begpos);
  54. 54.   procList.Add(tempName);
  55. 55.

    if

    (tempName == ProcName)
  56. 56.   {
  57. 57.

    if

    (!thisProc.CloseMainWindow())
  58. 58.   thisProc.Kill();

    // 当发送关闭窗口命令无效时强行结束进程
  59. 59.   result =

    true

    ;
  60. 60.   }
  61. 61.   }
  62. 62.

    return

    result;
  63. 63. }