C#使用Process類殺死進程,執行命令等

c#之process類相關整理c#

1、根據進程名獲取進程的用戶名?性能

須要添加對 System.Management.dll 的引用spa

複製代碼
using System.Diagnostics; using System.Management; static void Main(string[] args) { foreach (Process p in Process.GetProcesses()) { Console.Write(p.ProcessName); Console.Write("----"); Console.WriteLine(GetProcessUserName(p.Id)); } Console.ReadKey(); } private static string GetProcessUserName(int pID) { string text1 = null; SelectQuery query1 = new SelectQuery("Select * from Win32_Process WHERE processID=" + pID); ManagementObjectSearcher searcher1 = new ManagementObjectSearcher(query1); try { foreach (ManagementObject disk in searcher1.Get()) { ManagementBaseObject inPar = null; ManagementBaseObject outPar = null; inPar = disk.GetMethodParameters("GetOwner"); outPar = disk.InvokeMethod("GetOwner", inPar, null); text1 = outPar["User"].ToString(); break; } } catch { text1 = "SYSTEM"; } return text1; }
複製代碼

 

進程名 是 p.ProcessName日誌

2、獲取進程code

using System.Diagnostics;orm

【注】System.Diagnostics 命名空間提供特定的類,使您可以與系統進程、事件日誌和性能計數器進行交互。blog

複製代碼
string str = ""; Process[] processes; //Get the list of current active processes. processes = System.Diagnostics.Process.GetProcesses(); //Grab some basic information for each process. Process process; for(int i = 0;i<processes.Length-1;i++) { process = processes[i]; str = str + Convert.ToString(process.Id) + " : " + process.ProcessName + "\r\n"; } System.Windows.Forms.MessageBox.Show(str); txtProcessID.Text = processes[0].Id.ToString(); //顯示進程相關信息 string s = ""; System.Int32 processid; Process process; processid = Int32.Parse(txtProcessID.Text); process = System.Diagnostics.Process.GetProcessById(processid); s = s + "該進程的整體優先級類別:" + Convert.ToString(process.PriorityClass) + " \r\n"; s = s + "由該進程打開的句柄數:" + process.HandleCount + "\r\n"; s = s + "該進程的主窗口標題:" + process.MainWindowTitle + "\r\n"; s = s + " 該進程容許的最小工做集大小:" + process.MinWorkingSet.ToString() + " \r\n"; s = s + "該進程容許的最大工做集大小:" + process.MaxWorkingSet.ToString() + " \r\n"; s = s + "該進程的分頁內存大小:" + process.PagedMemorySize + "\r\n"; s = s + "該進程的峯值分頁內存大小:" + process.PeakPagedMemorySize + "\r\n"; System.Windows.Forms.MessageBox.Show(s); } catch { System.Windows.Forms.MessageBox.Show("不合法的進程ID!"); }
複製代碼

 

【注】Int32 值類型表示值介於-2,147,483,648 到+2,147,483,647 之間的有符號整數。接口

Int32 提供了一些方法,來比較該類型的實例、將實例的值轉換爲它的String 表示形式以及將數字的String 表示形式轉換爲該類型的實例。進程

有關格式規範代碼如何控制值類型的String 表示形式的信息,請參閱格式設置概述。事件

此類型實現接口IComparable、IFormattable 和IConvertible。使用Convert 類進行轉換,而不是使用此類型的IConvertible 顯式接口成員實現。

值得一提的是,Process 類具備不少成員變量,這些成員變量能夠得到進程的幾乎每個細節。上面的例子中只是簡單地選擇了幾個成員加以演示。若是開發中有須要,能夠參考MSDN Library,查詢Process類成員以得到更詳細的信息,這裏就不一一列出了。

3、殺死進程

複製代碼
private void button2_Click(object sender, EventArgs e) { if (listView1.SelectedItems.Count > 0) { try { string proName = listView1.SelectedItems[0].Text; Process[] p = Process.GetProcessesByName(proName); p[0].Kill(); MessageBox.Show("進程關閉成功!"); GetProcess(); } catch { MessageBox.Show("沒法關閉此進程!"); } } else { MessageBox.Show("請選擇要終止的進程!"); } }
複製代碼

 


4、C#中利用process類調用外部程序以及執行dos命令

複製代碼
private string RunCmd(string command) { //實例一個Process類,啓動一個獨立進程 Process p = new Process(); //Process類有一個StartInfo屬性 //設定程序名 p.StartInfo.FileName = "cmd.exe"; //設定程式執行參數 p.StartInfo.Arguments = "/c " + command; //關閉Shell的使用 p.StartInfo.UseShellExecute = false; //重定向標準輸入 p.StartInfo.RedirectStandardInput = true; p.StartInfo.RedirectStandardOutput = true; //重定向錯誤輸出 p.StartInfo.RedirectStandardError = true; //設置不顯示窗口 p.StartInfo.CreateNoWindow = true; //啓動 p.Start(); //也能夠用這種方式輸入要執行的命令 //不過要記得加上Exit要否則下一行程式執行的時候會當機 //p.StandardInput.WriteLine(command); //p.StandardInput.WriteLine("exit"); //從輸出流取得命令執行結果 return p.StandardOutput.ReadToEnd(); }
相關文章
相關標籤/搜索