2

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

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

Whole Spiel - 我有一项服务,目前正在检查和终止进程(IE 游戏),我已经告诉它,如果那天我不允许。伟大的。我将 CanStop 设置为 false,这样如果我沉迷其中,就不能直接终止服务。我有一个程序将进行密码检查(其他人输入密码),如果密码正确,它将停止服务。(如果我有严重的提款)问题是使用 ServiceController 类。

据我所知,ServiceController 只是一个装饰器(是的设计模式猜测),所以我无法获得它所代表的实际服务。第一次尝试是属性信息,但我太笨了,没有意识到那是没有意义的。其次是字段信息,因为我认为可能有一个“代表”服务的私有字段。正如您可能猜到的那样,两者都失败了。

有任何想法吗?

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

新的(失败的)尝试:

管理对象服务;ManagementBaseObject 停止服务;

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

stopService = service .InvokeMethod("StopService", null, null);

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

4

2 回答 2

3

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

而且,当然,如果你足够聪明,可以编写自己的服务,那么你就足够聪明,可以调出 task-man 并简单地终止服务进程。CanStop 不会阻止您从服务下方拉出地毯。CanStop 只告诉服务控制管理器不要向服务发送“停止”命令。

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

于 2008-09-29T18:00:58.297 回答
0

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

于 2008-09-29T17:32:31.923 回答