Gio*_*rgi 6 c# winapi process access-denied win32exception
我试图通过pid获取进程路径,但我得到Win32Exception(访问ID被拒绝).
代码如下所示:
string path = Process.GetProcessById(pid).MainModule.FileName
Run Code Online (Sandbox Code Playgroud)
我已经尝试将OpenProcess与GetModuleFileNameEx一起使用,但OpenProcess返回0.我甚至尝试根据C#启用SeDebugPrivilege - 如何启用SeDebugPrivilege但它没有帮助.
上面的代码适用于大多数进程,但抛出SynTPHelper.exe(Synaptics Pointing Device Helper)的错误.应用程序在与我的代码相同的用户名下运行.两者,我的应用程序和进程都以64位运行.
是否可以在不以管理员身份运行我的应用程序的情况下检索路径?
编辑
任务管理器能够"打开文件位置",即使我没有以管理员身份运行它.
Gio*_*rgi 15
最后我设法解决了这个问题.事实证明,在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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11744 次 |
| 最近记录: |