簡介:
.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"); //打開cmd Process.Start("cmd"); //打開cmd Process.Start("notepad"); //打開記事本
怎么樣?這樣子是不是跟在按Win+R鍵打開的運行框中輸入應用名打開應用一個效果?這跟環境變量有些關系,不過經過測試即使自己在環境變量中的Path變量中加上路徑,也無法通過Process.Start()打開自己的應用,應該是Process只進行了有限的封裝,並不會搜索太多路徑。不過我們其實是可以通過 Environment.GetEnvironmentVariable(string variable);方法獲取到環境變量來自行封裝的,不過不是本篇博客的講解范圍就不說了。
Process使用方法4:
Process.Start(ProcessStartInfo stateInfo);
ProcessStartInfo state = new ProcessStartInfo(); //啟動信息 state.FileName = "notepad.exe";; //設置需要啟動的應用程序 state.Arguments = @"C:\Users\XU\Desktop\新建文本文檔.txt"; //設置需要傳遞的參數u Process.Start(state); //啟動應用程序
通過ProcessStartInfo對象啟動一個應用程序,這個演示是和前面的代碼一個效果的,而且寫起來還很麻煩,到底有什么好處呢?第二篇博客會有一個案例為各位演示通過ProcessStartInfo對象啟動一個應用程序的好處,以及必須通過ProcessStartInfo對象啟動應用程序才能完成的功能。
Kill方法的用途和注意事項:
在獲取到返回值Process對象后我們可以通過Kill()方法結束掉該進程,調用此方法前要確保進程在運行不然會拋異常。使用Process類啟動某些軟件后你會發現,進程對象獲取到了,而且對應的軟件已經打開了,但是在結束進程時會拋"進程已停止運行的異常",這種情況是你使用Process類啟動的應用程序啟動了另一個應用程序並在你調用Kill方法前關閉了自己。如果不太理解這句話,我詳細說來,你寫了一個無窗口程序名為"程序1",然后在"程序1"中用Process類啟動了另一個應用程序叫"程序2",在Process.Start("程序2");這行代碼調用完后自動關閉"程序1",這樣的話你用Process類啟動"程序1"后又試圖關閉"程序1"當然會拋異常啦。
不要嘗試結束系統進程或者結束受保護的進程,這樣會拋異常。
第一篇博客到這里算是完了,多謝大家的觀看。
文章原創,歡迎轉載,請標明出處。