如何用.NET Core 构建 Windows 服务监听事件并调用 Webhook
要实现一个监听 Windows 事件的 Windows 服务并调用 Webhook,可以按照以下步骤进行:
-
创建一个 Windows 服务项目。打开 Visual Studio,选择“新建项目”,在“Visual C#”下选择“Windows 服务”,输入项目名称并选择保存路径,然后点击“创建”。
-
在服务代码中添加对 Windows 事件日志的监听。在服务项目的“Program.cs”文件中,添加以下代码:
using System.Diagnostics.Eventing.Reader;
static void Main(string[] args)
{
using (var eventLogWatcher = new EventLogWatcher(new EventLogQuery('System', PathType.LogName, '*[System/EventID=51 or System/EventID=133]')))
{
eventLogWatcher.EventRecordWritten += (sender, eventArgs) =>
{
// 发现 EventID=51 或 133 的事件,则调用 Webhook
if (eventArgs.EventRecord.Id == 51 || eventArgs.EventRecord.Id == 133)
{
// 调用 Webhook 的代码
// ...
}
};
eventLogWatcher.Enabled = true;
// 等待服务停止信号
var quitEvent = new ManualResetEvent(false);
Console.CancelKeyPress += (sender, eventArgs) =>
{
eventArgs.Cancel = true;
quitEvent.Set();
};
quitEvent.WaitOne();
}
}
该代码使用了 Windows 事件日志的查询功能,通过查询“System”日志中“EventID”为 51 或 133 的事件来监听 Windows 事件。当发现符合条件的事件时,调用 Webhook。
- 编写 Webhook 调用代码。在发现符合条件的事件时,需要调用 Webhook 发送信息。可以使用 .NET Core 中的 HttpClient 类来实现。以下是一个简单的 Webhook 调用代码:
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
public static async Task CallWebhookAsync(string url, string message)
{
using (var client = new HttpClient())
{
var content = new StringContent(message, Encoding.UTF8, 'application/json');
var response = await client.PostAsync(url, content);
if (!response.IsSuccessStatusCode)
{
throw new Exception($'Webhook 调用失败,状态码:{response.StatusCode},响应内容:{await response.Content.ReadAsStringAsync()}');
}
}
}
- 将 Webhook 调用代码添加到服务代码中。在服务代码中,当发现符合条件的事件时,调用 Webhook:
// 调用 Webhook 的代码
await CallWebhookAsync('https://example.com/webhook', '{ 'event': 'WindowsEventDetected' }');
-
编译并安装 Windows 服务。在 Visual Studio 中,选择“生成”菜单,然后选择“生成解决方案”。编译完成后,在 Windows 服务管理器中选择“安装服务”,选择生成的服务程序 exe 文件,然后点击“确定”安装服务。
-
启动服务并测试。在 Windows 服务管理器中选择刚刚安装的服务,然后点击“启动”按钮启动服务。当 EventID 为 51 或 133 的 Windows 事件被触发时,服务将会自动调用 Webhook。可以在 Webhook 目标地址中查看是否收到了调用请求。
原文地址: https://www.cveoy.top/t/topic/n27K 著作权归作者所有。请勿转载和采集!