Add odniesienie do twojego projektu:
System.Management
Następnie dodaj następującą metodę do projektu:
public string GetProcessOwner(int processId)
{
string MethodResult = null;
try
{
StringBuilder sb = new StringBuilder();
sb.Append(" SELECT ");
sb.Append(" * ");
sb.Append(" FROM ");
sb.Append(" WIN32_PROCESS");
sb.Append(" WHERE ");
sb.Append(" ProcessId = " + processId);
string Query = sb.ToString();
ManagementObjectCollection Processes = new ManagementObjectSearcher(Query).Get();
foreach (ManagementObject Process in Processes)
{
string[] Args = new string[] { "", "" };
int ReturnCode = Convert.ToInt32(Process.InvokeMethod("GetOwner", Args));
switch(ReturnCode)
{
case 0:
MethodResult = Args[1] + "\\" + Args[0];
break;
default:
MethodResult = "None";
break;
}
}
}
catch //(Exception ex)
{
//ex.HandleException();
}
return MethodResult;
}
Następnie dodać tę metodę:
public DataTable GetProcessTable()
{
DataTable MethodResult = null;
try
{
List<Process> Processes = Process.GetProcesses().ToList<Process>();
DataTable dt = new DataTable();
dt.Columns.Add("Name", typeof(string));
dt.Columns["Name"].ReadOnly = true;
dt.Columns.Add("Id", typeof(string));
dt.Columns["Id"].ReadOnly = true;
dt.Columns.Add("Owner", typeof(string));
dt.Columns["Owner"].ReadOnly = true;
foreach (Process p in Processes)
{
DataRow r = dt.NewRow();
bool Match = false;
r["Id"] = p.Id.ToString();
r["Name"] = p.ProcessName;
r["Owner"] = GetProcessOwner(p.Id);
dt.Rows.Add(r);
}
MethodResult = dt;
}
catch //(Exception ex)
{
//ex.HandleException();
}
return MethodResult;
}
Wywołanie GetProcessTable() daje DataTable wszystkich uruchomionych procesów wraz z ich Id i nazwa, która jest przydatna, ponieważ może być używana jako parametr DataGridView w Datasource.
Daj mi znać, jeśli potrzebujesz więcej pól dodających do tabeli.
W swojej drugiej metodzie, twój zagnieżdżone jeśli zawiera ciąg, właścicielu. Sądzę, że zamiast tego zamierzałeś zwrócić ten ciąg. – crftr
Dzięki Mike, naprawiłem to. –
Słowo ostrzeżenia: takie kwerendy usługi WMI są dostępne tylko z odpowiednimi uprawnieniami. Konta nieadministracyjne zwykle nie mają dostępu do dostawców WMI, w tym Win32_Process. http://msdn.microsoft.com/en-us/library/windows/desktop/aa394603%28v=vs.85%29.aspx – Korey