我试图通过pid获取进程路径,但我得到Win32Exception(访问ID被拒绝).
代码如下所示:
string path = Process.GetProcessById(pid).MainModule.FileName
我已经尝试将OpenProcess与GetmodulefileNameEx一起使用,但OpenProcess返回0.我甚至尝试根据C# – How to enable SeDebugPrivilege启用SeDebugPrivilege,但它没有帮助.
上面的代码适用于大多数进程,但抛出SynTPHelper.exe(Synaptics Pointing Device Helper)的错误.应用程序在与我的代码相同的用户名下运行.两者,我的应用程序和进程都以64位运行.
是否可以在不以管理员身份运行我的应用程序的情况下检索路径?
编辑
解决方法
最后我设法解决了这个问题.事实证明,在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,buff,out size)) { return buffer.ToString(); } } finally { CloseHandle(hprocess); } } return string.Empty; }
原文地址:https://www.jb51.cc/csharp/98347.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。