当CanStop设置为False(C#)时停止Windows服务的方法

时间:2020-03-06 14:53:06  来源:igfitidea点击:

好的,所以我没有意志力实验的第二部分是:

简要问题
有没有一种方法可以在Windows服务上动态设置CanStop属性?

整个尖顶
我有一项服务目前正在检查并杀死进程(IE游戏),我已告知它是否不允许进入这一天。伟大的。我将CanStop设置为false,这样如果我沉迷于瘾,我就不能仅仅终止服务。我有一个程序,该程序将进行密码检查(其他人输入密码),如果密码正确,该程序将停止服务。 (如果我有严重的提款)问题是使用ServiceController类。

据我所知,ServiceController只是一个装饰器(是的,可以通过设计来猜测),因此我无法获得它所代表的实际服务。最初的尝试是"物业信息",但我太愚蠢了,以至于没有意识到那是毫无意义的。其次是Field Info,因为我认为可能存在一个"代表"服务的私有字段。我们可能会猜到,两者都失败了。

有任何想法吗?

编辑1
我想避免将CanStop值设置在可以轻松获取的位置,例如配置文件或者注册表。因此,我正在尝试(尽管没有成功)使此问题完全在程序中处理。

新(失败)尝试:

ManagementObject service;
  ManagementBaseObject stopService;
  
  service = new
  ManagementObject("Win32_Service.Name='StopProgram'");
  
  stopService = service
  .InvokeMethod("StopService", null,
  null);

不知道这有什么作用。我认为由于CanStop情况,它无法停止。

解决方案

我们可以在某个地方设置一个标志(例如注册表或者文件),而不是尝试直接访问和控制该服务,然后在服务执行要尝试控制的事件之前将其检查。

" CanStop"是Windows服务控制管理器中服务注册的属性。我们不能在大步前进时更改它。

而且,当然,如果我们足够聪明,可以编写自己的服务,那么我们就足够聪明,可以提出任务,并简单地终止服务流程。 CanStop不会阻止我们将地毯从服务下方拉出。 CanStop仅告诉服务控制管理器不要向服务发送"停止"命令。

如果我们想允许某些东西通过,则使用全局事件来启用/禁用该服务的检查-或者只是从PC上删除游戏! :-)