Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何创建监控程序启动的服务?_C#_Asp.net_Winforms_Wcf_Service - Fatal编程技术网

C# 如何创建监控程序启动的服务?

C# 如何创建监控程序启动的服务?,c#,asp.net,winforms,wcf,service,C#,Asp.net,Winforms,Wcf,Service,我正在尝试创建一个服务,它将等待程序运行 假设我运行iTunes.exe,我的服务将执行类似于显示消息框的操作,该消息框将显示“iTunes.exe已启动”。实现这一点的唯一方法是定期获取进程列表,并检查您等待的进程是否已启动: while(Process.GetProcesses().All(p=>p.ProcessName.ToLower() != "itunes.exe"){ Thread.Sleep(2000); } //Do Something! 编辑: 更好的解决方案

我正在尝试创建一个服务,它将等待程序运行


假设我运行iTunes.exe,我的服务将执行类似于显示消息框的操作,该消息框将显示“iTunes.exe已启动”。

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

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请求:)