我正在尝试创建一个监视进程创建/终止的应用程序,并记录它执行的时间和最终记录在mysql db中的频率。我面临的问题是,我使用 Win32_ProcessStartTrace 和 Win32_ProcessStopTrace 进行监控。创建进程后,立即使用Win32_Process查询其命令行。 对于那些快速退出的进程,进程创建和命令行查询 之间似乎存在“滞后”,因此我无法获取命令行。
有没有办法完成这项工作?
答案 0 :(得分:4)
此代码监视新进程的启动并打印使用的命令行:
using System;
using System.Management;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
new Test().Run();
Console.ReadLine();
}
}
internal class Test
{
public void Run()
{
ProcessWatcher procWatcher = new ProcessWatcher();
procWatcher.Start();
}
private class ProcessWatcher : ManagementEventWatcher
{
private const string wql =
@"SELECT * FROM __InstanceCreationEvent WITHIN 1
WHERE TargetInstance ISA 'Win32_Process'";
public ProcessWatcher()
{
this.Query.QueryLanguage = "WQL";
this.Query.QueryString = wql;
this.EventArrived += newProcessStarted;
}
private void newProcessStarted(object sender,
EventArrivedEventArgs e)
{
var process = e.NewEvent["TargetInstance"]
as ManagementBaseObject;
if (process != null)
{
var cmdLine = process.Properties["CommandLine"].Value;
Console.WriteLine(cmdLine);
}
}
}
}
}