C#使用WMI實現(xiàn)監(jiān)聽進程的啟動和關閉
寫在前面
Windows Management Instrumentation(WMI)是用于管理基于 Windows 操作系統(tǒng)的數(shù)據(jù)和操作的基礎結構。具體的API可以查看 WMI編程手冊。
WMIC 是WMI的命令行管理工具,使用 WMIC,不但可以管理本地計算機,還可以管理同一Windows域內(nèi)的所有遠程計算機(需要必要的權限),而被管理的遠程計算機可以不預先安裝WMIC,只需要支持WMI即可。WMIC 通過 WMIC.exe 實現(xiàn)了分析、解釋并執(zhí)行來自命令行的參數(shù)別名(Alias)的引擎,這個文件通常位于 "C:\Windows\System32\wbem"文件夾中(支持Windows XP和Windows2003及以后的系統(tǒng))。
命令行示例:wmic cpu get name 查看CPU信息

在.net core中使用需要從NuGet安裝 System.Management 包,而在.net framework直接引用即可。
代碼實現(xiàn)
using System.Management;
public class Program
{
public static void Main(string[] args)
{
//創(chuàng)建WQL事件查詢,監(jiān)視進程開啟
var qCreate = new WqlEventQuery("__InstanceCreationEvent", TimeSpan.FromSeconds(1), "TargetInstance ISA 'Win32_Process'");
//創(chuàng)建WQL事件查詢,監(jiān)視進程關閉
var qDelete = new WqlEventQuery("__InstanceDeletionEvent", TimeSpan.FromSeconds(1), "TargetInstance ISA 'Win32_Process'");
// 指定名稱的查詢語句
// "TargetInstance ISA 'Win32_Process' AND TargetInstance.Name = 'Notepad.exe'"
//創(chuàng)建事件查詢的偵聽器(ManagementEventWatcher)
var wCreate = new ManagementEventWatcher(qCreate);
var wDelete = new ManagementEventWatcher(qDelete);
// 注冊啟動事件
wCreate.EventArrived += (sender, e) =>
{
Console.WriteLine("開啟進程:{0}", GetInfo(e.NewEvent));
};
// 注冊關閉事件
wDelete.EventArrived += (sender, e) =>
{
Console.WriteLine("關閉進程:{0}", GetInfo(e.NewEvent));
};
//開始異步偵聽
wCreate.Start();
wDelete.Start();
Console.ReadLine();
}
/// <summary>
/// 輸出事件對應的ManagementBaseObject(本例中的Win32_Process實例)的信息
/// </summary>
private static string GetInfo(ManagementBaseObject obj)
{
var instance = (ManagementBaseObject)obj["TargetInstance"];
return string.Format("{0} - {1} - {2}", instance["Name"], instance["ProcessId"], DateTime.Now);
}
}
調(diào)用示例

稍加修改一下就可以用來實現(xiàn)一個守護進程,具體用途應該都懂得。
到此這篇關于C#使用WMI實現(xiàn)監(jiān)聽進程的啟動和關閉的文章就介紹到這了,更多相關C# WMI監(jiān)聽進程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C#通過經(jīng)緯度計算2個點之間距離的實現(xiàn)代碼
這篇文章主要介紹了C#通過經(jīng)緯度計算2個點之間距離實現(xiàn)代碼,本文對實現(xiàn)原理、經(jīng)緯度基本知識等一并做了講解,需要的朋友可以參考下2014-08-08

