2008-09-29 48 views
2

好了,所以两部分的I have no will power experiment是:办法阻止Windows服务时CanStop设置为False(C#)

摘要问题 - 有没有一种方法来设置动态Windows服务CanStop属性设置?

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

尽我所知,ServiceController只是一个装饰器(耶设计模式猜测),所以我没有办法得到它所代表的实际服务。第一次尝试是物业信息,但我太愚蠢,不知道什么是毫无意义的。其次是Field Info,因为我认为可能有一个“代表”服务的私人领域。你可能猜到,都失败了。

任何想法?

编辑1 我想避免有CanStop值的地方,我可以像配置文件或注册表一样轻松获得它。所以我尝试着,虽然不成功,但在程序中完全处理了这个问题。

新(失败)尝试:

的ManagementObject服务; ManagementBaseObject stopService;

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

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

不知道这是否做了什么。我认为它无法停止,因为CanStop的情况。

回答

2

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

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

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

+0

被进程kill致死。我什至没有这件事。是的,我可以删除游戏,但这更像是一个学习的东西。 – 2008-09-29 18:04:30

0

与其试图直接访问和控制服务,您可以在某处设置标志(如注册表或文件),然后在执行您试图控制的事件之前由您的服务进行检查。