Windows平台如何获取最近启动进程的文件路径?是否有对应WinAPI?
没问题,这个需求在Windows上完全可以实现,我给你整理几种靠谱的方案和对应的WinAPI:
1. 读取Windows事件日志
Windows系统会把进程创建的相关事件记录到事件日志中,你可以通过WinAPI来提取这些历史记录:
- 核心API:
OpenEventLog(打开指定日志)、ReadEventLog(读取日志条目) - 关键事件ID:4688(进程创建事件),这个事件里包含了完整的进程文件路径、创建时间,甚至是父进程信息
- 注意:读取Security日志需要管理员权限,而且日志会根据系统配置自动轮转或清理,如果历史记录已经被覆盖,就无法获取了
2. 使用ETW(事件追踪机制)
ETW是Windows原生的高性能事件追踪框架,既能实时捕获进程创建事件,也可以配置留存历史记录(如果预先开启了相关追踪会话):
- 核心API:
StartTrace(创建追踪会话)、EnableTraceEx2(订阅指定事件提供者)、ProcessTrace(处理捕获到的事件) - 要订阅的提供者:
Microsoft-Windows-Kernel-Process,关注其中的ProcessCreate事件,该事件会返回进程路径、创建时间、PID等详细信息 - 优势:信息全面、实时性强;缺点:需要正确配置ETW会话,如果没有预先开启追踪,可能无法获取之前的历史记录
3. 补充:仅获取当前运行进程的信息(不符合历史需求)
如果只是想拿当前存活进程的路径和启动时间,可以用这些API:
CreateToolhelp32Snapshot配合Process32First/Process32Next遍历进程- 或者
EnumProcesses+OpenProcess+QueryFullProcessImageName获取路径,再用GetProcessTimes获取启动时间 - 但这个只能拿到正在运行的进程,已经退出的记录拿不到,所以只是作为补充说明
重要提醒
- 几乎所有获取进程历史或系统级进程信息的操作,都需要管理员权限才能正常执行,否则可能会被系统拒绝访问
- 事件日志和ETW的历史记录留存时间,取决于系统的日志大小限制、追踪会话配置,不是永久保存的
内容的提问来源于stack exchange,提问作者original.roland




