是否可以记录谁启动或停止了Windows服务?

问题描述 投票:0回答:5

我有一些用 C# 编写的 Windows 服务。当有人停止或启动服务时,我希望能够确定是谁并记录该信息。

我尝试记录

Environment.UserName
,但即使在我的本地计算机上,它也会评估为SYSTEM。

此外,目前这些服务运行在 Windows 2000 服务器上。

c# windows-services
5个回答
19
投票

在系统选项卡上的事件查看器(控制面板 | 管理工具 | 事件查看器)中,服务控制管理器记录每个事件的启动和停止者。我刚刚亲自测试过并查看了结果。这让我想到两件事:

  1. 您可以在事件发生时从服务控制管理器查询或挂钩这些事件,或者
  2. 您绝对可以查询事件查看器的“系统”日志来查找您的服务的这些事件。

希望这能引导您找到解决方案。


9
投票
  • 您可以通过服务控制管理器过滤系统事件日志

事件 ID 7040 - 涵盖服务启动类型更改(例如禁用、手动、自动)

事件 ID 7036 - 涵盖服务启动/停止

对于其他拥有 PowerShell 的人,您可以使用以下命令:

get-eventlog -source "Service Control manager" -LogName System | select message, timegenerated, username | Out-GridView


2
投票

您可以按照本文启用审核。

此外,用

OnStop()
方法向自己发送电子邮件提醒可能是个好主意。


0
投票

可能没有办法。您获取环境用户的任何常规 .NET 方法都将返回服务运行所使用的凭据的用户(通常是系统、本地服务、网络服务等)。

我可能会轮询系统以查看用户是否登录,并假设用户已登录。当然,这会打折那些因某种原因被系统关闭的服务(大概你的服务不会),并且只有在多个用户同时登录的情况下才能帮助你缩小范围(但是,你可以始终记录两者)。


0
投票
  1. 只要打开事件查看器(开始菜单 -> 搜索“事件”事件查看器就会出现,打开它)
  2. 在事件查看器左侧菜单上展开“Windows 日志”。
  3. 单击“应用程序”。 (它将在“常规”选项卡中显示您的应用程序错误和描述。
  4. 再次尝试启动您的服务,并从事件查看器中查看“常规”选项卡中短暂停止的确切原因。
© www.soinside.com 2019 - 2024. All rights reserved.