gpt4 book ai didi

c# - Windows 服务 : Session Unlock Event with Fast User Switching and Terminal Services Stopped and Disabled

转载 作者:太空宇宙 更新时间:2023-11-03 16:43:26 25 4
gpt4 key购买 nike

我正在编写一个 C# .NET 3.5 Windows 服务,它需要在用户登录或解锁事件发生时执行一些操作。我尝试通过将我的事件处理程序添加到 Microsoft.Win32.SystemEvents.SessionSwitch 来注册该服务:

using Microsoft.Win32;

SystemEvents.SessionSwitch += new SessionSwitchEventHandler(SystemEvents_SessionSwitch);

void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
{
if (e.Reason == SessionSwitchReason.SessionLogon)
{
// Do Task
}
else if (e.Reason == SessionSwitchReason.SessionUnlock)
{
// Do Task
}
}

我还尝试覆盖 ServiceBase 类继承的 OnSessionChange(SessionChangeDescription changeDescription) {...} 方法:

protected override void OnSessionChange(SessionChangeDescription changeDescription)
{
if (changeDescription.Reason == SessionChangeReason.SessionLogon)
{
// Do Task
}
else if (changeDescription.Reason == SessionChangeReason.SessionUnlock)
{
// Do Task
}

base.OnSessionChange(changeDescription);
}

许多 session 事件由所描述的任何一种方法处理,不幸的是,当快速用户切换和终端服务停止和禁用时,这些方法都不会处理 session 解锁事件。但是,当两个服务都已启用并正在运行时,将处理该事件。将要部署的工作环境将不会启用服务。

是否有其他方法可以在 C# .NET 托管代码环境中实现此目的?我看到的许多问题都使用上述方法回答了问题,它们确实可以正常工作,但在禁用快速用户切换和终端服务时无法正常工作。

最佳答案

CanHandleSessionChangeEvent 属性默认设置为 False

在初始化组件时插入如下代码

public Service1()
{
InitializeComponent();
this.CanHandleSessionChangeEvent = true;
this.CanHandlePowerEvent = true;
this.CanPauseAndContinue = true;
this.CanShutdown = true;
this.CanStop = true;
this.AutoLog = true;
}

关于c# - Windows 服务 : Session Unlock Event with Fast User Switching and Terminal Services Stopped and Disabled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6696724/

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