C#使用WMI實(shí)現(xiàn)監(jiān)聽(tīng)進(jìn)程的啟動(dòng)和關(guān)閉
寫(xiě)在前面
Windows Management Instrumentation(WMI)是用于管理基于 Windows 操作系統(tǒng)的數(shù)據(jù)和操作的基礎(chǔ)結(jié)構(gòu)。具體的API可以查看 WMI編程手冊(cè)。
WMIC 是WMI的命令行管理工具,使用 WMIC,不但可以管理本地計(jì)算機(jī),還可以管理同一Windows域內(nèi)的所有遠(yuǎn)程計(jì)算機(jī)(需要必要的權(quán)限),而被管理的遠(yuǎn)程計(jì)算機(jī)可以不預(yù)先安裝WMIC,只需要支持WMI即可。WMIC 通過(guò) WMIC.exe 實(shí)現(xiàn)了分析、解釋并執(zhí)行來(lái)自命令行的參數(shù)別名(Alias)的引擎,這個(gè)文件通常位于 "C:\Windows\System32\wbem"文件夾中(支持Windows XP和Windows2003及以后的系統(tǒng))。
命令行示例:wmic cpu get name 查看CPU信息
在.net core中使用需要從NuGet安裝 System.Management 包,而在.net framework直接引用即可。
代碼實(shí)現(xiàn)
using System.Management; public class Program { public static void Main(string[] args) { //創(chuàng)建WQL事件查詢,監(jiān)視進(jìn)程開(kāi)啟 var qCreate = new WqlEventQuery("__InstanceCreationEvent", TimeSpan.FromSeconds(1), "TargetInstance ISA 'Win32_Process'"); //創(chuàng)建WQL事件查詢,監(jiān)視進(jìn)程關(guān)閉 var qDelete = new WqlEventQuery("__InstanceDeletionEvent", TimeSpan.FromSeconds(1), "TargetInstance ISA 'Win32_Process'"); // 指定名稱的查詢語(yǔ)句 // "TargetInstance ISA 'Win32_Process' AND TargetInstance.Name = 'Notepad.exe'" //創(chuàng)建事件查詢的偵聽(tīng)器(ManagementEventWatcher) var wCreate = new ManagementEventWatcher(qCreate); var wDelete = new ManagementEventWatcher(qDelete); // 注冊(cè)啟動(dòng)事件 wCreate.EventArrived += (sender, e) => { Console.WriteLine("開(kāi)啟進(jìn)程:{0}", GetInfo(e.NewEvent)); }; // 注冊(cè)關(guān)閉事件 wDelete.EventArrived += (sender, e) => { Console.WriteLine("關(guān)閉進(jìn)程:{0}", GetInfo(e.NewEvent)); }; //開(kāi)始異步偵聽(tīng) wCreate.Start(); wDelete.Start(); Console.ReadLine(); } /// <summary> /// 輸出事件對(duì)應(yīng)的ManagementBaseObject(本例中的Win32_Process實(shí)例)的信息 /// </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)用示例
稍加修改一下就可以用來(lái)實(shí)現(xiàn)一個(gè)守護(hù)進(jìn)程,具體用途應(yīng)該都懂得。
到此這篇關(guān)于C#使用WMI實(shí)現(xiàn)監(jiān)聽(tīng)進(jìn)程的啟動(dòng)和關(guān)閉的文章就介紹到這了,更多相關(guān)C# WMI監(jiān)聽(tīng)進(jìn)程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Unity實(shí)現(xiàn)10天簽到系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)10天簽到系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04C#通過(guò)經(jīng)緯度計(jì)算2個(gè)點(diǎn)之間距離的實(shí)現(xiàn)代碼
這篇文章主要介紹了C#通過(guò)經(jīng)緯度計(jì)算2個(gè)點(diǎn)之間距離實(shí)現(xiàn)代碼,本文對(duì)實(shí)現(xiàn)原理、經(jīng)緯度基本知識(shí)等一并做了講解,需要的朋友可以參考下2014-08-08C# TSC打印二維碼和條形碼的實(shí)現(xiàn)方法
下面小編就為大家分享一篇C# TSC打印二維碼和條形碼的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01使用C#判斷一個(gè)字符串是否包含大寫(xiě)字符的五種方法
本文提供了五種判斷字符串是否包含大寫(xiě)字符的方法及其實(shí)現(xiàn)源碼,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-12-12