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

时间:2022-09-02 23:31:07
转载: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. }