Node.js:如何检测指定程序何时启动?
好问题!在Windows 10环境下,Node.js本身并没有内置模块直接提供监听特定程序启动的事件,但我们可以通过第三方库或者调用Windows系统原生能力来实现你想要的效果。下面给你两种实用方案,按需选择:
方案一:使用
ps-list+轮询检测(简单易上手) 这种方案通过定时获取系统进程列表,对比发现新启动的目标程序,逻辑直观,还能跨平台使用。
首先安装依赖:
npm install ps-list
然后是示例代码,替换targetProcessName为你要检测的程序即可:
const psList = require('ps-list'); const targetProcessName = 'notepad.exe'; // 改成你关注的程序,比如chrome.exe let knownPids = new Set(); // 初始化已存在的目标进程PID集合 async function initKnownProcesses() { const processes = await psList(); processes.forEach(proc => { if (proc.name === targetProcessName) { knownPids.add(proc.pid); } }); } // 定时检查新进程 async function checkNewProcesses() { const processes = await psList(); processes.forEach(proc => { if (proc.name === targetProcessName && !knownPids.has(proc.pid)) { console.log(`🎉 检测到程序 ${targetProcessName} 启动!PID: ${proc.pid}`); // 在这里执行你的业务逻辑,比如记录日志、触发通知等 knownPids.add(proc.pid); } }); } // 启动检测流程 (async () => { await initKnownProcesses(); setInterval(checkNewProcesses, 1000); // 每秒检测一次,可根据需求调整间隔 })();
优缺点:
- 优点:实现简单,无需依赖Windows特定API,跨平台兼容。
- 缺点:轮询会有轻微延迟,间隔越短资源占用略高(一般1秒间隔完全没问题)。
方案二:Windows WMI事件监听(实时高效)
如果追求零延迟的实时检测,直接用Windows原生的WMI(Windows Management Instrumentation)事件监听是最佳选择,它能在进程创建瞬间触发回调,不需要轮询。
我们可以用wmi-client库来简化WMI调用:
npm install wmi-client
示例代码如下:
const WmiClient = require('wmi-client'); const client = new WmiClient({ host: 'localhost', namespace: 'root\\CIMV2' }); const targetProcessName = 'notepad.exe'; // 监听进程创建事件,指定只关注目标程序 client.query( `SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name = '${targetProcessName}'`, (err, results) => { if (err) { console.error('监听进程事件出错:', err); return; } results.forEach(event => { const processInfo = event.TargetInstance; console.log(`🚀 程序 ${processInfo.Name} 已启动,PID: ${processInfo.ProcessId}`); // 这里写你的处理逻辑 }); } ); // 保持脚本运行(否则脚本会直接退出) process.stdin.resume();
优缺点:
- 优点:实时性拉满,无延迟,系统资源占用极低。
- 缺点:仅支持Windows系统,依赖WMI服务(Windows默认开启,若被禁用需手动开启),部分杀毒软件可能会拦截WMI查询,需确保脚本有足够权限。
额外注意事项
- 程序名称要写完整的exe文件名,比如
chrome.exe而非Chrome,Windows进程名不区分大小写,但最好和任务管理器里显示的一致。 - 如果要检测管理员权限启动的程序,你的Node.js脚本也需要以管理员权限运行,否则可能无法获取到该进程的信息。
- 若使用WMI方案,遇到权限问题时,右键点击终端选择“以管理员身份运行”再启动脚本即可。
内容的提问来源于stack exchange,提问作者East Arctica
相关产品推荐
相关产品推荐

