Agregar una referencia a su proyecto:
System.Management
continuación, agregue el siguiente método para su proyecto:
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;
}
A continuación, agregue este método:
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;
}
Calling GetProcessTable() le da un DataTable de todos los procesos que se ejecutan junto con su Id and Name, que es útil porque se puede usar como un parámetro Datasource de DataGridView.
Deseo saber si necesita más campos para agregar a la tabla.
En el segundo método, el anidado si contiene una cadena, propietario. Creo que tenías la intención de devolver esa cadena, en su lugar. – crftr
Gracias Mike, lo arregló. –
Una palabra de advertencia: las consultas de WMI como estas solo están disponibles con los privilegios adecuados. Las cuentas que no son administradores generalmente no tienen acceso a los proveedores de WMI, incluido Win32_Process. http://msdn.microsoft.com/en-us/library/windows/desktop/aa394603%28v=vs.85%29.aspx – Korey