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

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

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

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

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

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

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

您可以根据本文启用审核

http://windowsitpro.com/systems-management/access-denied-auditing-users-who-might-be-starting-and-stopping-services

此外,在OnStop()方法中向自己发送电子邮件警报可能是个好主意。

可能没有办法。 您在环境用户处获得的任何常规.NET方法都将返回其服务运行凭据的用户(通常是SYSTEM,LOCAL SERVICE,NETWORK SERVICE等)。

我可能会这样做是轮询系统以查看用户是否已登录,并假设用户已执行此操作。 当然,这会折扣由系统因某种原因关闭的服务(可能是您的服务不会),并且只能在一次登录多个用户的情况下帮助您缩小范围(但是,您可以总是记录它们两个)。

  1. 只需打开事件查看器(开始菜单 – >搜索“事件”事件查看器将打开,打开它)
  2. 在事件查看器左侧菜单中展开“Windows日志”。
  3. 单击应用程序。 (它将在“常规”选项卡中显示您的应用程序错误和描述。
  4. 再次尝试启动您的服务,并从事件查看器查看在“常规”选项卡中短暂停止的确切原因。