gpt4 book ai didi

c# - 如何从服务可靠地捕获 Windows 登录、注销、锁定和解锁事件?

转载 作者:太空狗 更新时间:2023-10-29 23:11:46 35 4
gpt4 key购买 nike

using Microsoft.Win32; 

public class App
{
static void Main()
{
SystemEvents.SessionSwitch += SystemEvents_SessionSwitch;
Console.ReadLine();
SystemEvents.SessionSwitch -= SystemEvents_SessionSwitch;
}

static void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
{
if(e.Reason == SessionSwitchReason.SessionLock)
{
Console.WriteLine("locked at {0}", DateTime.Now);
}
if(e.Reason == SessionSwitchReason.SessionUnlock)
{
Console.WriteLine("unlocked at {0}", DateTime.Now);
}
}

我已经创建了一个 Windows 服务。当我重新启动系统并登录、注销、锁定或解锁 session 时。它不会捕获事件。该服务正在运行,但无法正常工作。

当我重新启动服务时,它将按预期捕获所有事件。我该如何解决/解决这个问题?

最佳答案

使您的服务依赖于 TermService(终端服务服务)。在幕后,SystemEvents 类基于 WTSRegisterSessionNotification Win32 函数,is documented如果 Terminal Services 服务在调用时尚未启动,则失败。通过将对 TermService 的依赖添加到您的服务中,就不会发生这种情况。您还可以使用类似 this 的技术连接到 Global\TermSrvReadyEvent 全局事件并等待注册 SystemEvent 处理程序,直到 TS“就绪”事件触发。

关于c# - 如何从服务可靠地捕获 Windows 登录、注销、锁定和解锁事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1526119/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com