I am working on a query on Win32_Process to get some info about running processes
ManagementObjectSearcher mSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_Process WHERE ProcessID = " + processId);
ManagementObject process = mSearcher.Get().Cast<ManagementObject>().FirstOrDefault();
if (process != null)
{
string[] argList = {string.Empty, string.Empty};
int returnVal = Convert.ToInt32(process.InvokeMethod("GetOwner", argList));
Username = returnVal == 0 ? argList[0] : "";
try
{
Description = FileVersionInfo.GetVersionInfo((string) process["ExecutablePath"]);
}
catch (Exception)
{
Description = "";
}
}
This query takes long time, so I am trying to make 3 solutions combination
1- ("SELECT TOP 1 * FROM Win32_Process WHERE ProcessID = " + processId);
But: Not accepted (Invalid query)
2- Using Linq to sql to get the first or default value directly with linq
But: couldn't make it
3-("SELECT TOP 1 ExecutablePath FROM Win32_Process WHERE ProcessID = " + processId);
but assuming that TOP 1 worked, I cannot:
int returnVal = Convert.ToInt32(process.InvokeMethod("GetOwner", argList));
So what is the best solution for this function to be as fast as possible