C#中隱式運行CMD命令列視窗的方法

來源:互聯網
上載者:User

MS的CMD命令列是一種重要的操作介面,一些在C#中不那麼方便完成的功能,在CMD中幾個簡單的命令或許就可以輕鬆搞定,如果能在C#中能完成CMD視窗的功能,那一定可以使我們的程式簡便不少。
下面介紹一種常用的在C#程式中調用CMD.exe程式,並且不顯示命令列視窗介面,來完成CMD中各種功能的簡單方法。
如下所示:

複製代碼 代碼如下:System.Diagnosties.Process p=new System.Diagnosties.Process();
p.StartInfo.FileName="cmd.exe";//要執行的程式名稱
p.StartInfo.UseShellExecute=false;
p.StartInfo.RedirectStanderInput=true;//可能接受來自調用程式的輸入資訊
p.StartInfo.RedirectStanderOutput=true;//由調用程式擷取輸出資訊
p.StartInfo.CreateNoWindow=true;//不顯示程式視窗
p.Start();//啟動程式
//向CMD視窗發送輸入資訊:
p.StanderInput.WriteLine("shutdown -r t 10"); //10秒後重啟(C#中可不好做哦)
//擷取CMD視窗的輸出資訊:
string sOutput = p.StandardOutput.ReadToEnd();有啦以下代碼,就可以神不知鬼不覺的操作CMD啦。總之,Process類是一個非常有用的類,它十分方便的利用第三方的程式擴充了C#的功能。

詳細源碼如下: 複製代碼 代碼如下:using System;
using System.Diagnostics;
namespace Business
{
/// <summary>
/// Command 的摘要說明。
/// </summary>
public class Command
{
private Process proc = null;
/// <summary>
/// 構造方法
/// </summary>
public Command()
{
proc = new Process();
}
/// <summary>
/// 執行CMD語句
/// </summary>
/// <param name="cmd">要執行的CMD命令</param>
public void 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.Close();
}
/// <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,"");
}
}
}

調用時 複製代碼 代碼如下:Command cmd = new Command();
cmd.RunCmd("dir");

擷取輸出資訊應注意:

ReadtoEnd()容易卡住:

複製代碼 代碼如下:[csharp] view plaincopyprint?string outStr = proc.StandardOutput.ReadtoEnd();

string outStr = proc.StandardOutput.ReadtoEnd();

更傾向於使用ReadLine():

複製代碼 代碼如下:[csharp] view plaincopyprint?string tmptStr = proc.StandardOutput.ReadLine();
string outStr = "";
while (tmptStr != "")
{
outStr += outStr;
tmptStr = proc.StandardOutput.ReadLine();
}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.