private static string GetProcessPathUsingManagement(int processId) {
var sw = Stopwatch.StartNew();
try {
using (var s = new ManagementObjectSearcher($"SELECT ExecutablePath FROM Win32_Process WHERE ProcessId = {processId}"))
using (var c = s.Get()) {
return c.Cast<ManagementObject>().Select(x => x[@"ExecutablePath"]).FirstOrDefault()?.ToString();
}
} catch (Exception e) {
AcToolsLogging.Write(e);
} finally {
AcToolsLogging.Write(sw.ElapsedMilliseconds + " ms");
}
return null;
}