最后我设法解决了这个问题.事实证明,在Vista及以上版本中有新功能可用于获取进程路径和新进程访问(PROCESS_QUERY_LIMITED_INFORMATION):

以下代码适用于非提升过程:

private static string GetExecutablePathAboveVista(UIntPtr dwProcessId)

{

StringBuilder buffer = new StringBuilder(1024);

IntPtr hprocess = OpenProcess(ProcessAccessFlags.PROCESS_QUERY_LIMITED_INFORMATION, false, dwProcessId);

if (hprocess != IntPtr.Zero)

{

try

{

int size = buffer.Capacity;

if (QueryFullProcessImageName(hprocess, 0, buff, out size))

{

return buffer.ToString();

}

}

finally

{

CloseHandle(hprocess);

}

}

return string.Empty;

}

更多推荐