【问题标题】:Windows background service to kill processes by name on demandWindows 后台服务按需按名称杀死进程
【发布时间】:2016-10-26 02:06:08
【问题描述】:

我想编写一个简单的后台服务,可以按需为所有用户杀死某个进程的所有实例。该过程将始终相同(Microsoft Access)。这个想法是,没有管理权限的用户能够执行一个脚本,该脚本告诉后台服务在继续执行其他任务之前终止进程。我确实有一个用 C 编写的小程序,它能够在从本地系统帐户执行时杀死所有进程,但我不确定如何将它变成可以按需触发的服务。欢迎任何建议。此外,我愿意以任何其他方式为没有管理权限的所有用户终止进程的所有实例。

【问题讨论】:

  • 我还没有这样做,但this 看起来是一种与服务交谈的简单方式。您必须编写一个非常小的第二个程序来将sc.ExecuteCommand() 发送到您的服务,而不是运行“脚本”。
  • 谢谢,我会调查的!

标签: c# c++ c windows service


【解决方案1】:

您可以使用 SrvStart(您可以在 this page 上找到)和 Windows 命令行工具 sc.exe 等工具从可执行文件创建服务。 Here 是一个可以帮助你做到这一点的教程。

为了与服务“对话”,您需要实现一些进程间通信机制,以便以用户权限运行的客户端(脚本左右)请求服务完成工作。有很多方法可以做到这一点...请参阅 this page 了解您可以使用的方法。

另一种方法是摆脱您的 C 可执行文件并使用 C# 创建一个 Windows .NET 服务。在此服务中,覆盖 ServiceBase.OnCustomCommand。然后,您将能够使用 Windows 命令行工具 sc.exe 向您的服务发送自定义命令。

另一方面,如果您只需要从用户帐户以管理员权限运行可执行文件,而无需密码,则有一种方法可以创建一个快捷方式来执行此操作。有关如何制作此类快捷方式的详细信息,请参阅this page

【讨论】:

  • 谢谢。我的可执行文件仅在由本地系统执行时才有效,否则它只会终止执行可执行文件的帐户所拥有的进程。我会考虑你的其他建议!
猜你喜欢
  • 2011-02-25
  • 2011-06-19
  • 1970-01-01
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多