簡介:
.Net中Process類功能十分強大。它可以接受程序路徑啟動程序,接受文件路徑使用默認程序打開文件,接受超鏈接自動使用默認浏覽器打開鏈接,或者打開指定文件夾等等功能。
想要使用Process類之前,需要先引用using System.Diagnostics;
Process類用法1:
Process類有很多種使用方式,比如我只想打開一個應用程序的話,直接調用Process.Start("應用的路徑");即可打開對用的應用程序,用默認程序打開文件,打開超鏈接,打開文件夾也都只用給一個路徑即可。
Process.Start("");調用之後大多數時候都會返回一個Process對象,但是參數是超鏈接和路徑的話是不會返回Process對象的。
Process.Start(@"C:\Users"); //使用資源管理器打開目錄 Process.Start("http://www.cnblogs.com/menghuijinxi/p/5734274.html"); //使用默認浏覽器打開網頁 Process.Start(@"C:\Users\XU\Desktop\新建文本文檔.txt"); //使用默認應用程序打開文件 rocess.Start(@"G:\Unity 5.3.5f1\Editor\Unity.exe"); //打開應用程序
Process類用法2:
Process.Start("軟件路徑", "啟動時傳遞的參數");
此方式啟動進程也很簡單,第一個參數給軟件的路徑,第二個參數給文件路徑。
軟件路徑一定要是存在的路徑,不然會拋異常。
如果給的文件路徑參數是錯誤的,而且是不受支持的話會怎麼樣?這裡我們要詳細介紹一下第二個參數的到底是什麼了?我們先看下代碼:
static void Main(string[] args) { Console.ReadKey(); }
這段代碼是控制台應用程序中的,很多學了很長時間c#的同學恐怕都還不知道上面的args參數是干嘛用的吧,平時我們通過編譯器創建出的控制台應用程序默認就有這些代碼,時間長了都習以為常了,也沒有什麼人在意這些參數的用途,不知道沒關系,咱們一一道來。
我們從Main函數開始詳細講解,Main函數是整個應用程序的入口函數這個不用多說了,程序一開始運行就是調用這個函數。Main函數其實是可以有返回值的,這返回值有什麼用,還有如何獲取一個進程執行完畢後的返回值這些問題暫時先不討論。我們先討論Main函數的參數問題,經過測試C#中的Main數有且只能有一個字符數組參數。我們來詳細講解一下這個過程,假設其他應用程序"程序1"使用Process類啟動了我們寫的這個應用程序"程序2"(通常是操作系統完成這項工作),並傳入一個參數(Process.Start()方法的第二個參數),這個時候"程序2"的Main方法會被調用(期間怎麼被調用之類的我也不是很清楚了),並且被傳入一個參數(args參數),然後我們就可以獲取到"程序1"傳給我們的需要處理的參數了,之後我們就能隨心所欲的處理這些參數了。
所以說args參數其實就是在程序啟動時或者說Main方法被調用時傳入的一個參數。
這樣我們也就能理解第二個參數如果是不合法的話,會出現什麼情況了吧,這就不歸我們管了,這是我們調用的應用程序該處理的事情。
static class Program { [STAThread] static void Main(string[] args) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } }
這個是個Win32程序,Win32程序默認生成的代碼並沒有參數,不過不代表不支持參數,我們可以自行添加。
Process使用方法3:
Process.Start("應用程序名稱");
Process.Start("cmd.exe");
Kill方法的用途和注意事項:
在獲取到返回值Process對象後我們可以通過Kill()方法結束掉該進程,調用此方法前要確保進程在運行不然會拋異常。使用Process類啟動某些軟件後你會發現,進程對象獲取到了,而且對應的軟件已經打開了,但是在結束進程時會拋"進程已停止運行的異常",這種情況是你使用Process類啟動的應用程序啟動了另一個應用程序並在你調用Kill方法前關閉了自己。如果不太理解這句話,我詳細說來,你寫了一個無窗口程序名為"程序1",然後在"程序1"中用Process類啟動了另一個應用程序叫"程序2",在Process.Start("程序2");這行代碼調用完後自動關閉"程序1",這樣的話你用Process類啟動"程序1"後又試圖關閉"程序1"當然會拋異常啦。
今天先寫到這裡,待續。。。
文章原創,歡迎轉載,請標明出處。