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

时间:2008-09-29 16:59:04

标签: c# windows service

好的,I have no will power experiment的第二部分是:

摘要问题 - 有没有办法动态设置Windows服务上的CanStop属性?

整个Spiel - 我有一个服务,目前检查和杀死进程(IE游戏)我告诉它,如果它是我不被允许的一天。大。我将CanStop设置为false,这样如果我放弃上瘾,我就不能杀死它。我有一个程序将进行密码检查(其他人输入密码),如果密码正确,将停止服务。 (如果我有严重的提款)问题是使用ServiceController类。

我可以告诉我,ServiceController只是一个装饰器(yah design patern guess),因此我无法获得它代表的实际服务。第一次尝试是财产信息,但我太愚蠢了,没有意识到什么是毫无意义的。第二个是Field Info,因为我认为可能有一个“代表”服务的私有字段。正如你猜测的那样,都失败了。

有什么想法吗?

编辑1 我想避免在某个地方轻松拥有CanStop值,就像配置文件或注册表一样。所以我试图在程序中完全处理这个问题,但不是成功的。

新(失败)尝试:

  

ManagementObject服务;   ManagementBaseObject stopService;

     

service = new   的ManagementObject( “Win32_Service.Name = 'StopProgram'”);

     

stopService = service   .InvokeMethod(“StopService”,null,   空);

不确定这有什么用。我认为由于CanStop的情况,它无法停止。

2 个答案:

答案 0 :(得分:2)

“CanStop”是Windows服务控制管理器中服务注册的属性。你无法在中途改变它。

当然,如果你足够聪明地编写自己的服务,那么你就足够聪明地培养任务人员并简单地终止服务流程。 CanStop不会阻止您从服务中拉出地毯。 CanStop仅告知服务控制管理器不向服务发送“停止”命令。

如果您想允许某些内容传递,请使用全局事件启用/禁用服务检查 - 或者只是从PC中删除游戏! : - )

答案 1 :(得分:0)

您可以在某个地方设置标记(如注册表或文件),然后在执行您尝试控制的事件之前由服务进行检查,而不是尝试直接访问和控制服务。 / p>