我正在编写一个程序来检查进程(启动时),并杀死任何不可接受的进程。
我的程序大部分都已完成,但我只遇到了一个问题:当我尝试获取在不同用户下运行的进程的路径(标准之一)时,(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,我已经将它用于其他部分了。)
答案 0 :(得分:0)
执行检查的程序以完全管理员权限运行
我认为你是指"提升管理员"在启用了UAC的Vista或Windows 7上,通过右键单击可执行文件并选择"以管理员身份运行"。
我在我的Windows 7系统上尝试过此操作,MainModule
以这种方式失败的唯一进程是audiodg
。我认为这个过程受到保护,以确保音频数字版权的安全性。如果循环遍历所有进程,则应捕获此异常。
(如果这不能解答您的问题,请考虑使用Process Explorer来检查给您带来麻烦的流程。右键单击Process Explorer以提升它。运行该流程的属性,然后点击Security选项卡Permissions按钮。将访问控制列表与您能够成功查询的进程进行比较。)
答案 1 :(得分:0)
解决方案是在相关用户下运行客户端应用程序,并使用该客户端应用程序查询路径等。