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

时间:2009-01-30 18:34:20

标签: c# windows-services

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

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

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

5 个答案:

答案 0 :(得分:14)

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

  1. 您可以在服务控制管理器发生时查询或挂钩这些事件,或
  2. 您绝对可以查询事件查看器的“系统”日志,以便为您的服务查找这些事件。
  3. 希望能引导您找到解决方案。

答案 1 :(得分:2)

您可以根据本文启用审核

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

此外,最好使用OnStop()方法向自己发送电子邮件。

答案 2 :(得分:1)

  • 您可以通过服务控制管理器筛选系统事件日志 enter image description here

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

事件ID 7036-涉及服务的启动/停止

enter image description here

对于其他具有PowerShell的用户,您可以使用以下方法:

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

enter image description here

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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