我有兴趣收听会话 0 中运行的 Windows 服务的注销事件
- 同时也知道是哪个用户正在注销(他们的会话 ID)
- 注意我在这里说的是可取消的注销事件,而不是注销事件
如何找出哪个用户正在注销 - 从SessionEndingEventArgs获取会话 ID ?
protected override void OnStart(string[] args)
{
SystemEvents.SessionEnding += SystemEvents_SessionEnding;
}
private void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e)
{
// SessionEndingEventArgs does not contain SID
// or other user identifying info?
}
[而且我还没有测试Windows 服务是否可以实际捕获 SessionEnding 事件]
或者可以使用SessionChangeDescription来识别即将注销的用户?
public ServiceApp()
{
CanHandleSessionChangeEvent = true;
}
protected override void OnSessionChange(SessionChangeDescription changeDescription)
{
// Although changeDescription has SessionId property
// I'm not sure it has the equivalent of session ending event?
base.OnSessionChange(changeDescription);
}
- 即在SessionLogoff用户已经注销
- 我不确定其他事件何时发生,例如ConsoleDisconnect ?
其他事件源?
- 或者Cassia是否提供此类事件,包括用户帐户信息?
- 或者我可以从某个地方的 WMI 中提取它吗?
- 或者直接使用一些Win32 API?