Forma de detener un servicio de Windows cuando CanStop está configurado en False (C #)

StackOverflow https://stackoverflow.com/questions/149632

  •  02-07-2019
  •  | 
  •  

Pregunta

Ok, entonces la segunda parte de no tengo voluntad experimento de poder es:

Pregunta resumida - ¿Hay alguna manera de establecer la propiedad CanStop en un servicio de Windows de forma dinámica?

Juego completo - Tengo un servicio que actualmente está verificando y eliminando procesos (IE Games). Se lo he dicho si es de día no se me permite. Genial. Configuré el CanStop en falso para que no pueda simplemente matar el servicio si cedo a la adicción. Tengo un programa que verificará la contraseña (alguien más ingresa la contraseña) que detendrá el servicio si la contraseña es correcta. (Si tengo retiros graves) El problema es usar la clase ServiceController.

Por lo que puedo decir, ServiceController simplemente es un decorador (yah design patern guess) y, por lo tanto, no tengo forma de llegar al servicio real que representa. El primer intento fue la información de la propiedad, pero fui demasiado tonto para darme cuenta de lo que sería inútil. La segunda fue la información de campo porque pensé que podría haber un campo privado que representa "". el servicio. Como puede suponer, ambos fallaron.

¿Alguna idea?

EDITAR 1 Me gustaría evitar tener el valor de CanStop en algún lugar al que pueda acceder fácilmente como un archivo de configuración o registro. Así que estoy intentando, aunque no con éxito, hacer que esto se maneje completamente en el programa.

Nuevos intentos (fallidos):

  

Servicio ManagementObject;   ManagementBaseObject stopService;

     

servicio = nuevo   ManagementObject (" Win32_Service.Name = 'StopProgram' ");

     

stopService = servicio   .InvokeMethod (" StopService " ;, null,   nulo);

No estoy seguro de que esto haya hecho nada. Asumo que no pudo detenerse debido a la situación de CanStop.

¿Fue útil?

Solución

El " CanStop " es un atributo del registro de servicios en el administrador de control de servicios de Windows. No puedes cambiarlo a mitad de camino.

Y, por supuesto, si eres lo suficientemente inteligente como para escribir tu propio servicio, entonces eres lo suficientemente inteligente como para abrir un hombre de tareas y simplemente matar el proceso del servicio. CanStop no le impedirá sacar la alfombra de debajo del servicio. CanStop solo le dice al administrador de control de servicio que no envíe " Stop " comandos al servicio.

Si desea permitir que pase algo, utilice un evento global para habilitar / deshabilitar la comprobación que realiza el servicio, ¡o simplemente elimine los juegos de la PC! :-)

Otros consejos

En lugar de intentar acceder y controlar directamente el Servicio, ¿podría establecer un indicador en algún lugar (como el registro o un archivo), que luego verificará su servicio antes de que ejecute el Evento que está tratando de controlar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top