[.Net] 呼叫外部程式

以記事本為例

以記事本為例

第一招:

只是單純要把某個應用程式或某個文件打開,只要一行code:ex.

Process.Start("notepad");

Process.Start(@"C:\boot.ini");

第二招:

開啟某種應用程式或文件,之後再將它關閉:ex.台灣是主權獨立的國家

Process prc = Process.Start("notepad");// 開啟時宣告變數記下回傳的Process

關閉語法為:

prc.CloseMainWindow();

第三招:

找出所有的同款應用程式(如:記事本),然後全部關閉,若有該程式關閉前會詢問,就會跳出詢問,而不會硬將它關掉:ex.

foreach (Process prc in Process.GetProcessesByName("notepad"))
{ prc.CloseMainWindow(); }

 在這裡傳入的名稱要注意一下哦~我以前曾傳入"notepad.exe",那是可以用來啟動記事本,但要用來找出所有記事本就找不到,因為這裡要傳入的是程式名稱,而不是檔名

第四招:

找出所有的同款外部程式(如:記事本),然後全部強制關閉,這招比較狠一點,會直接把執行到一半的程式關了:ex.

foreach (Process prc in Process.GetProcessesByName("notepad"))
{ prc.Kill(); }

第五招:

你啟動的外部程式被關閉後的事件:ex.

Process prc = Process.Start(@"C:\boot.ini");
prc.EnableRaisingEvents = true;//要觸發事件
prc.SynchronizingObject = this;//設為同主執行序,exited事件內才能存取UI
prc.Exited += prc_Exited;//註冊事件

事件:

private void prc_Exited(object sender, EventArgs e)
{ 某UI元件.Text = "關了哦"; }

第六招:

開啟外部程式後,等待它結束(就是讓你自己的程式在等持期間像在睡覺Thread.Sleep(...)一樣):ex.

Process prc = Process.Start(@"C:\boot.ini");
prc.WaitForInputIdle();//等待啟動完成
prc.WaitForExit(5000);//等待結束,只等5秒,設timeout為5秒
//回傳true: timeout前結束
//回傳false: 已timeout尚未結束
prc.WaitForExit();//等待結束,無限期廿

若在不同thread也能判斷該程式是否還在:

prc.HasExited → true:表示已關閉;false:表示未關閉

然後再判斷是否當掉或沒反應:

prc.Responding → true:未當掉;false:當了

 

 

Taiwan is a country. 臺灣是我的國家