【问题标题】:How to create a service that monitors for a program to start?如何创建监视程序启动的服务?
【发布时间】:2013-05-17 14:51:39
【问题描述】:

我正在尝试创建一个等待程序运行的服务。

假设我运行 iTunes.exe,然后我的服务将执行一些操作,例如显示一个消息框,显示“iTunes.exe 已启动”。

【问题讨论】:

标签: c# asp.net winforms wcf service


【解决方案1】:

实现此目的的唯一方法是定期获取进程列表并检查您等待的进程是否已启动:

while(Process.GetProcesses().All(p=>p.ProcessName.ToLower() != "itunes.exe"){
    Thread.Sleep(2000);
}
//Do Something!

编辑:

更好的解决方案是查询 Windows Management Instrumentation 服务并监视新进程:

// Run this in another thread and make sure you dispose the event watcher before exit
var start = new ManagementEventWatcher(new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace"));    

start.EventArrived += new EventArrivedEventHandler(delegate (object sender, EventArrivedEventArgs e) {
    Console.WriteLine("Name: {0}, Command Line: {1}", e.NewEvent.Properties["ProcessName"].Value, e.NewEvent.Properties["Commandline"].Value);
});

start.Start();

【讨论】:

  • 这是一个非常糟糕的方法。
  • 一个糟糕但唯一的解决方案。
  • 是的,对不起,我的错。我忘记了 WMI 请求 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-11
  • 2020-04-07
  • 1970-01-01
  • 1970-01-01
  • 2020-05-28
  • 1970-01-01
相关资源
最近更新 更多