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 进程空的可执行路径的主要内容,如果未能解决你的问题,请参考以下文章