我有一些用 C# 编写的 Windows 服务。当有人停止或启动服务时,我希望能够确定是谁并记录该信息。
我尝试记录
Environment.UserName
,但即使在我的本地计算机上,它也会评估为SYSTEM。
此外,目前这些服务运行在 Windows 2000 服务器上。
在系统选项卡上的事件查看器(控制面板 | 管理工具 | 事件查看器)中,服务控制管理器记录每个事件的启动和停止者。我刚刚亲自测试过并查看了结果。这让我想到两件事:
希望这能引导您找到解决方案。
可能没有办法。您获取环境用户的任何常规 .NET 方法都将返回服务运行所使用的凭据的用户(通常是系统、本地服务、网络服务等)。
我可能会轮询系统以查看用户是否登录,并假设用户已登录。当然,这会打折那些因某种原因被系统关闭的服务(大概你的服务不会),并且只有在多个用户同时登录的情况下才能帮助你缩小范围(但是,你可以始终记录两者)。