wmic 进程空的可执行路径

Posted

技术标签:

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

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

但是我可以在taskmanager找到它?

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

【问题讨论】:

一些进程根本不共享它们在 WMI 中的路径位置。为了查看是否有针对您的特定情况的解决方法,请编辑您的问题,告诉我们您正在寻找哪个特定项目,以及您在完成后想要实现的目标。该站点应该为您提供的代码的特定可重现问题提供帮助,请提供该代码和其他相关信息,以便我们可以重现该问题。 您正在运行提升的任务管理器,但未提升 wmic。尝试运行 wmic 提升。 wmic.exe 无法获取受保护进程的可执行路径(例如 PsProtectedSignerWindows-Light 保护)。您可以通过使用PROCESS_QUERY_LIMITED_INFORMATION 打开进程并调用QueryFullProcessImageNameW 来获取此信息。请注意,进程对象上的自主安全可能不会授予管理员访问权限(例如 csrss.exe 仅授予对 SYSTEM 的访问权限),在这种情况下,您可以启用 SeDebugPrivilege 以获得有限的查询访问权限。 谢谢@RaymondChen。这解释了问题 "您正在运行提升的任务管理器..." 对于任何想了解更多信息的人:1.Does task manager run as administrator by default on Windows 10? - Super User 2.What is the easy way to start Task Manager as an administrator in Windows 8? - Super User 【参考方案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();

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

【讨论】:

以上是关于wmic 进程空的可执行路径的主要内容,如果未能解决你的问题,请参考以下文章

从 C++ 中的可执行路径(或从 hWnd,或从 pid)获取程序名称

wmic.exe的三、简单的使用实例

怎样在windows内核中根据进程名获取执行程序的路径

QT如何修改编译后产生的可执行文件的路径》

mmap 的可执行文件可以多次使用吗?

linux内核模块中fd inode的可执行路径