Sessiontime - 记录 Windows 会话和锁定/解锁事件,并解析和显示收集的数据






4.98/5 (13投票s)
记录各种 Windows 会话事件,记录它们,并按用户解析和显示会话事件
引言
本文介绍了一种在 Windows 操作系统上记录会话事件的可能方法。它还解析事件数据以显示会话时长和锁定/解锁时间段。记录以下会话事件:logon
(登录)、logoff
(注销)、lock
(锁定)、unlock
(解锁)。
源代码可能对需要工作源代码来帮助他们开发自己的 Windows 会话时间解决方案的开发人员有用。如果您想监控您在电脑上花费的时间,或者您登录并开始工作的时间,Windows 服务和应用程序可能会很有用。
该应用程序包含以下部分
SessionTimeMonitor
- 记录事件的 Windows 服务SessionTimeViewer
- 显示已解析的会话时长和会话内锁定/解锁时间段的 Windows 应用程序SessionTimeCommon
- 包含SessionTimeMonitor
和SessionTimeViewer
使用的共享功能SessionTimeSetupWix
- Windows 服务和应用程序的安装程序/卸载程序
SessionTimeMonitor
主要部分是一个名为 SessionTimeMonitor
的 Windows 服务 - 它处理 OnSessionChange
事件,该事件在每次发生会话更改时触发。当事件触发时,服务会将记录添加到磁盘上的 XML 文件中。记录包含有关事件的信息,例如日期时间、事件类型等。
SessionTimeViewer
SessionTimeViewer
应用程序打开并解析包含 SessionTimeMonitor
写入的数据记录的 XML 文件。它会显示会话列表,其中包含它们的开始和结束日期时间,以及单个会话内的锁定/解锁时间段。SessionTimeViewer
实现为一个 WPF 应用程序。
背景
我需要这个应用程序来确定我在电脑上花费了多少时间,并且我想要一个可定制的应用程序。另一种方法是编写一个解析 Windows 事件日志的应用程序,但我认为解析 Windows 事件日志并配对登录/注销和锁定/解锁事件相当麻烦。
开发工具
Windows 服务和 WPF 应用程序的初始版本是使用 .NET Framework 4.0 和 Visual Studio 2010 开发的。当前解决方案使用 Visual Studio 2017 和 WiX 支持以及 .NET Framework 4.0 进行构建。
工作原理
下图显示了这种方法的工作原理
SessionTimeMonitor
(Windows 服务)-> 写入 -> XML 数据文件 -> 被读取和解析 -> SessionTimeViewer
(Windows 应用程序)
处理 OnSessionChange 事件
该解决方案的主要部分是一个 Windows 服务,它将会话事件记录到 XML 数据文件中,这是通过重写 OnSessionChange
事件来实现的。记录的数据以存储在磁盘上的 XML 文件的形式保存。
XML 数据记录
每个记录的事件由 SessionTrackingParams
XML 元素表示。在服务启动(OnStart
事件)时,为每个现有会话或在会话更改(OnSessionChange
事件)时,将此元素添加到 XML 文件中。这些事件由 SessionTimeMonitor
服务记录并添加到 XML 文件中。
显示会话时长和锁定/解锁时间段
XML 文件的解析由 SessionTimeViewer
执行,它是一个 Windows WPF 应用程序,显示以下信息
sessions
- 同一次服务运行中,由ServiceRunGuid
标记的登录和注销事件之间的时段- 未锁定时间段 - 同一次会话中,在以下事件之间的时段:登录和注销、登录和锁定、解锁和注销、解锁和锁定
- 锁定时间段 - 同一次会话中,在以下事件之间的时段:锁定和解锁、锁定和注销
这样,就可以看到用户的会话何时持续了多久,以及何时发生了锁定和解锁事件。
关注点
- 在某些系统上,可能需要用户以管理员权限安装
SessionTime
,也可能需要用户以管理员权限运行SessionTimeViewer
。 SessionTimeMonitor
使用 Cassia 库,该库是“一个用于访问本机 Windows 终端服务 API(现为远程桌面服务 API)的 .NET 库”(https://code.google.com/p/cassia/,2016-01-06),它使用其GetSessions
方法来获取会话数据。- 当计算机启动时,
SessionTimeMonitor
可能会:在用户登录之前启动 - 在这种情况下,用户登录将通过OnSessionChange
事件记录;在用户登录之后启动 - 在这种情况下,所有现有会话都通过服务的OnStart
事件进行记录。 - 服务和应用程序已在 Windows 7(32 位)、Windows 8.1(64 位)、Windows 10(64 位)上进行了测试
- 该应用程序要求计算机上已安装当前使用的 .NET Framework 运行时。
历史
- 1.0.0.0 - 2016-06-01 - 初始版本
- 1.0.0.1 - 2016-06-01 - 1.0.0.0 版本的错误修复,由于最后一次未经测试的更改,前一版本未能正确记录注销事件
- 1.0.0.2 – 多项错误修复,引入了用户选择和 Wix 设置
- 1.0.0.3 – 多项改进:添加了包含版本/作者/存储库/文档信息的“关于”窗口,将 .docx 文档文件替换为 .txt,提高了文档质量,将错误日志移至
Environment.SpecialFolder.LocalApplicationData
文件夹,添加了应用程序图标,全局变量移至GlobalSettings
类,删除了已弃用的SessionTimeSetup
项目。 - 1.0.0.4 – 重命名 UI 以提高应用程序和文档中使用术语的正确性和一致性,向用户显示异常信息,在“关于”窗口中显示所有三个组件的版本。