c# - Process.MainModule --> "Access is denied"

标签 c# process

<分区>

我想以不同的方式处理这个问题, IE。确定我是否有权访问。

是否可以查看您是否可以访问主模块?

foreach (Process p in Process.GetProcesses())
        {
            try
            {
                //This throws error for some processes.
                if (p.MainModule.FileName.ToLower().EndsWith(ExeName, StringComparison.CurrentCultureIgnoreCase))
            {
                 //Do some stuff
            }

            }
            catch (Exception)
            {  
                //Acess denied 
            }
        }

最佳答案

  [Flags]
  private enum ProcessAccessFlags : uint
  {
      QueryLimitedInformation = 0x00001000
  }

  [DllImport("kernel32.dll", SetLastError = true)]  
  private static extern bool QueryFullProcessImageName(
        [In] IntPtr hProcess,
        [In] int dwFlags,
        [Out] StringBuilder lpExeName,
        ref int lpdwSize);

    [DllImport("kernel32.dll", SetLastError = true)]
  private static extern IntPtr OpenProcess(
     ProcessAccessFlags processAccess,
     bool bInheritHandle,
     int processId);

String GetProcessFilename(Process p)
{ 
 int capacity = 2000;
 StringBuilder builder = new StringBuilder(capacity);
 IntPtr ptr = OpenProcess(ProcessAccessFlags.QueryLimitedInformation, false, p.Id);
 if (!QueryFullProcessImageName(ptr, 0, builder, ref capacity))
 {
    return String.Empty;
 }

 return builder.ToString();
}

将 pinvoke 与 ProcessAccessFlags.QueryLimitedInformation 结合使用。这将允许您在没有特殊管理员权限的情况下获取进程的文件名,并且可以跨 x32 和 x64 进程工作。

关于c# - Process.MainModule --> "Access is denied",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8431298/

相关文章:

c# - 是否有 Visual Studio Load Test 开源等效项 - 或者类似的东西?

c++ - 获取进程图标 mfc C++

java - 子进程继承了什么?

c# - 如何在数据操作方法之外调用 TryUpdateModel

python - 多处理子流程

java - 如何避免两个进程并行运行

process - 如何为已经运行的进程提供 Kerberos 和 AFS 票证?

c# - Windows 蓝牙 le GetGattServicesAsync 方法中的错误

c# - TextReader/StreamReader 中是否有选项 "go to line"?

c# - 类变量未在异步方法中更新