如何在不使用WMI的VBScript中获取运行进程的可执行文件完整路径
WMI禁用场景下VBScript获取进程可执行文件全路径的解决方案
结论
纯原生VBScript(无额外组件依赖)无法实现该需求。VBScript本身不具备直接调用Win32 API的能力,默认仅提供WScript.Shell、Scripting.FileSystemObject等有限的宿主对象,所有内置的进程信息查询能力最终都依赖WMI实现,WMI禁用后原生接口全部失效。
可选实现方案
方案1:调用PowerShell获取结果(无需额外编译程序)
Vista及以上版本Windows默认预装PowerShell,XP也可手动安装,PowerShell无需依赖WMI即可枚举进程路径,你可以在VBScript中调用PowerShell命令捕获输出后解析。
示例代码:
Set WshShell = CreateObject("WScript.Shell") ' 调用PowerShell输出进程ID、进程名、路径,转换为CSV格式方便解析 Set execObj = WshShell.Exec("powershell -Command ""Get-Process | Select-Object Id,Name,Path | ConvertTo-Csv -NoTypeInformation""") result = execObj.StdOut.ReadAll() ' 按行拆分后逐行按逗号解析即可得到所有进程的路径信息 WScript.Echo result
方案2:编译原生Win32程序调用系统API
如果目标环境无PowerShell可用,可编译独立原生程序调用以下Win32 API实现需求:
- 调用
CreateToolhelp32Snapshot创建系统进程快照 - 调用
Process32First/Process32Next遍历所有进程条目 - 调用
OpenProcess获取进程句柄 - 调用
GetModuleFileNameEx获取进程对应的可执行文件全路径
编译后的程序将结果输出到控制台,VBScript通过WScript.Shell.Exec调用该程序并读取输出解析即可。
注意:两种方案都需要对应权限才能获取系统级进程、其他用户运行进程的全路径,普通用户权限下仅能读取当前用户启动的进程路径。
内容的提问来源于stack exchange,提问作者BrickByBrick
相关产品推荐
相关产品推荐

