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服务。当我重新启动系统并登录,注销,锁定或解锁会话时。它不会捕获事件。该服务正在运行,但无法正常运行。
当我重新启动服务时,它将按预期捕获所有事件。如何进行故障排除/修复?
答案 0 :(得分:6)
使您的服务依赖于TermService(终端服务服务)。在封面下,SystemEvents类基于WTSRegisterSessionNotification Win32函数,如果终端服务服务在调用时尚未启动,则is documented将失败。通过将TermService的依赖性添加到您的服务,这将不会发生。您还可以使用this之类的技术连接到Global \ TermSrvReadyEvent全局事件,并等待注册SystemEvent处理程序,直到TS“就绪”事件触发为止。
答案 1 :(得分:0)
尝试注册事件而不是在readline之后将其删除 您正在注册,然后立即取消注册,这是没有意义的。