【问题标题】:wmic process empty executablepathwmic 进程空的可执行路径
【发布时间】:2020-08-11 13:11:10
【问题描述】:

为什么来自wmic process get name, commandline, processid, executablePath 的某些进程不显示ExecutablePath 的值?

但是我可以在找到它?

有没有办法从获取可执行路径?

【问题讨论】:

  • 一些进程根本不共享它们在 WMI 中的路径位置。为了查看是否有针对您的特定情况的解决方法,请编辑您的问题,告诉我们您正在寻找哪个特定项目,以及您在完成后想要实现的目标。该站点应该为您提供的代码的特定可重现问题提供帮助,请提供该代码和其他相关信息,以便我们可以重现该问题。
  • 您正在运行提升的任务管理器,但未提升 wmic。尝试运行 wmic 提升。
  • wmic.exe 无法获取受保护进程的可执行路径(例如 PsProtectedSignerWindows-Light 保护)。您可以通过使用PROCESS_QUERY_LIMITED_INFORMATION 打开进程并调用QueryFullProcessImageNameW 来获取此信息。请注意,进程对象上的自主安全可能不会授予管理员访问权限(例如 csrss.exe 仅授予对 SYSTEM 的访问权限),在这种情况下,您可以启用 SeDebugPrivilege 以获得有限的查询访问权限。
  • 谢谢@RaymondChen。这解释了问题

标签: taskmanager wmic windows wmic taskmanager


【解决方案1】:

谢谢大家,尤其是@Eryk Sun,这是我的非常简单的解决方案,适用于其他将面临同样问题的人。

import com.sun.jna.platform;

String getExPath(int pid) {
        Kernel32 kernel32 = Kernel32.INSTANCE;
        WinNT.HANDLE hProcess = kernel32.OpenProcess(WinNT.PROCESS_QUERY_LIMITED_INFORMATION, false, pid);
        char buffer[] = new char[1024];
        IntByReference size = new IntByReference(buffer.length);
        kernel32.QueryFullProcessImageName(hProcess, 0, buffer, size);
        return new String(buffer).trim();
}

我正在寻找类似的方法来获取进程的命令行,但我没有成功。感谢您的建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多