歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C#的Process類的一些用法

C#的Process類的一些用法

日期:2017/3/1 10:38:36   编辑:Linux編程

c#之process類相關整理

一、根據進程名獲取進程的用戶名?

需要添加對 System.Management.dll 的引用

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

二、獲取進程

using System.Diagnostics;
【注】System.Diagnostics 命名空間提供特定的類,使您能夠與系統進程、事件日志和性能計數器進行交互。
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類成員以獲得更詳細的信息,這裡就不一一列出了。

三、殺死進程

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("請選擇要終止的進程!"); }

四、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();
}

Copyright © Linux教程網 All Rights Reserved