获取不同用户下的进程路径

时间:2011-07-18 02:06:48

标签: .net vb.net process

我正在编写一个程序来检查进程(启动时),并杀死任何不可接受的进程。

我的程序大部分都已完成,但我只遇到了一个问题:当我尝试获取在不同用户下运行的进程的路径(标准之一)时,(MainModule.FileName)我得到一个异常:

System.ComponentModel.Win32Exception occurred
  ErrorCode=-2147467259
  Message="Access is denied"
  NativeErrorCode=5
  Source="System"
  StackTrace:
       at System.Diagnostics.ProcessManager.OpenProcess(Int32 processId, Int32 access, Boolean throwIfExited)    at System.Diagnostics.NtProcessManager.GetModuleInfos(Int32 processId, Boolean firstModuleOnly)    at System.Diagnostics.NtProcessManager.GetFirstModuleInfo(Int32 processId)    at System.Diagnostics.Process.get_MainModule()    at Forcep.Logic.ProcessStarted(Object sender, EventArrivedEventArgs e) in J:\Variable\Programming\Forcep\Forcep\Logic.vb:line 126

现在,执行检查的程序正在以完全的管理员权限运行,因此我几乎可以争论任何我需要的权限。

如何获取流程的路径? (顺便说一句,我可以使用WMI,我已经将它用于其他部分了。)

2 个答案:

答案 0 :(得分:0)

  

执行检查的程序以完全管理员权限运行

我认为你是指"提升管理员"在启用了UAC的Vista或Windows 7上,通过右键单击可执行文件并选择"以管理员身份运行"。

我在我的Windows 7系统上尝试过此操作,MainModule以这种方式失败的唯一进程是audiodg。我认为这个过程受到保护,以确保音频数字版权的安全性。如果循环遍历所有进程,则应捕获此异常。

(如果这不能解答您的问题,请考虑使用Process Explorer来检查给您带来麻烦的流程。右键单击Process Explorer以提升它。运行该流程的属性,然后点击Security选项卡Permissions按钮。将访问控制列表与您能够成功查询的进程进行比较。)

答案 1 :(得分:0)

解决方案是在相关用户下运行客户端应用程序,并使用该客户端应用程序查询路径等。