C# 服务未捕获SessionChange事件

C# 服务未捕获SessionChange事件,c#,events,service,C#,Events,Service,我正在写一个小服务,用来记录一些事件。然而,他们中只有两个人在工作,甚至在搜索之后,我也不知道为什么 以下是我要记录的事件: 启动计算机工作 会话锁定 会话解锁 关闭计算机工作 我三次检查我的服务是否可以捕获这些事件(我甚至将所有CanHandle..设置为true private void InitializeComponent() { // // Service1 // this.CanHandlePowerEvent = true; thi

我正在写一个小服务,用来记录一些事件。然而,他们中只有两个人在工作,甚至在搜索之后,我也不知道为什么

以下是我要记录的事件:

  • 启动计算机工作
  • 会话锁定
  • 会话解锁
  • 关闭计算机工作

我三次检查我的服务是否可以捕获这些事件(我甚至将所有CanHandle..设置为true

private void InitializeComponent()
{
    // 
    // Service1
    // 
    this.CanHandlePowerEvent = true;
    this.CanHandleSessionChangeEvent = true;
    this.CanPauseAndContinue = true;
    this.CanShutdown = true;
    this.ServiceName = "TimeToGoService";
}
这是我覆盖的OnSessionChange()

startBreak()endBreak()仅使用StreamWriter将日志写入文件


通过在网上搜索,我看到一些人使用隐藏表单来触发这些事件。这是问题所在吗?

不知道为什么,但上面的代码现在100%正常工作。可能遗漏了一些内容

编辑:无法准确识别错误。我可以给我的下一个用户提供代码旁边的服务配置

  • 服务用户是本地系统
  • CanHandleSessionChangingEvents设置为true
而且..差不多就是这样。请注意,服务不需要与桌面交互来捕获这些事件

此外,您可以在EventObserver中检查您的服务是否从终端获取事件,您将看到它们是否失败或成功


祝你好运,但是如果你使用上面的代码和配置,你应该能够让它工作;)

你的代码没有问题。。。有很多帖子都是关于会话变更的,但不可靠。
protected override void OnSessionChange(SessionChangeDescription changeDescription)
{
    if (changeDescription.Reason == SessionChangeReason.SessionLock)
    {
        startBreak();
    }
    else if (changeDescription.Reason == SessionChangeReason.SessionUnlock)
    {
        endBreak();
    }

    base.OnSessionChange(changeDescription);
}