[.net]使用process類別執行程式

  • 257
  • 0
  • 2016-12-20

如果要透過程式執行其他程式的話,process用起來就很適合又貼切

Process 類別 可以執行exe檔,也可以開啟cmd.exe下command指令

用起來相當方便

 

先假設我要執行cmd.exe程式,並且利用它建立資料夾

首先先設定ProcessStartInfo類別,因為不希望看到cmd程式的黑色畫面,所以將執行視窗隱藏

設定完後將ProcessStartInfo丟至process,執行start就完成了,超簡單

其中若要接收執行完成訊息或者錯誤訊息,ProcessStartInfo的相對應屬性要開啟,並且在process內的相對應event寫下要做的事情

程式如下:

public static string StartProcess(string fileName, string arguments)
{
	var procOutput = new StringBuilder();

	var startInfo = new ProcessStartInfo(fileName, arguments)
	{
		UseShellExecute = false,
		WindowStyle = ProcessWindowStyle.Hidden,
		CreateNoWindow = true,
		RedirectStandardOutput = true,
		RedirectStandardError = true
	};

	using (var proc = new Process() { StartInfo = startInfo })
	{
		//接收成功時文字訊息
		proc.OutputDataReceived += (sender, e) =>
		{
			if (!string.IsNullOrEmpty(e.Data)) procOutput.AppendLine(e.Data);
		};
		//接收失敗時文字訊息
		proc.ErrorDataReceived += (sender, e) =>
		{
			if (!string.IsNullOrEmpty(e.Data)) procOutput.AppendLine(e.Data);
		};
		proc.Start();
		proc.BeginOutputReadLine();
		proc.BeginErrorReadLine();
		proc.WaitForExit();
		if (proc.ExitCode < 1) //每個程式錯誤代碼定義都不同
		{
			//success
		}
		else
		{
			//fail: do something
		}
	}

	return procOutput.ToString();
}

 

執行cmd建立資料夾 (記得參數開頭要加上'/c')

string msg = deployment.StartProcess("cmd.exe", @"/c md d:\\ss");

 若原本就是一個exe檔,那我們就直接呼叫他就可以了

string msg = deployment.StartProcess("net", @"use");
string msg = deployment.StartProcess("robocopy", @"d:\work e:\back /e /xf *.tmp *.bak ");

此外,也可以搭配一些bat或腳本指令,用起來更方便唷