Manière d'arrêter un service Windows lorsque CanStop est défini sur False (C #)

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

  •  02-07-2019
  •  | 
  •  

Question

Ok, donc la deuxième partie de je n'ai pas de testament expérience de puissance est:

Question récapitulative - Est-il possible de définir la propriété CanStop sur un service Windows de manière dynamique?

Whole Spiel - J'ai un service qui vérifie et tue les processus (IE Games), je le lui ai dit si c'est le jour où je ne suis pas autorisé. Génial. J'ai mis le CanStop sur false pour que je ne puisse pas tuer le service si je cède à la dépendance. J'ai un programme qui aura un contrôle de mot de passe (quelqu'un d'autre entre le mot de passe) qui arrêtera le service si le mot de passe est correct. (Si j'ai des retraits sérieux) Le problème utilise la classe ServiceController.

Autant que je sache, ServiceController est juste un décorateur (yah patern design design) et je n’ai donc aucun moyen d’obtenir le service réel qu’il représente. La première tentative a été Property Info, mais j'étais trop bête pour comprendre ce que cela aurait été inutile. Deuxièmement, il y avait Field Info parce que je pensais qu'il pourrait y avoir un champ privé qui "représente" le service. Comme vous pouvez le deviner, les deux ont échoué.

Des idées?

MODIFIER 1 J'aimerais éviter d'avoir la valeur CanStop quelque part, je peux y accéder facilement, comme un fichier de configuration ou un registre. Je tente donc, mais sans succès, de le gérer complètement dans le programme.

Nouvelles tentatives (échouées):

  

service ManagementObject;   ManagementBaseObject stopService;

     

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

     

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

Je ne suis pas sûr que cela ait fait quelque chose. Je suppose que cela ne pourrait pas s’arrêter à cause de la situation de CanStop.

Était-ce utile?

La solution

Le " CanStop " est un attribut de l'enregistrement des services dans le gestionnaire de contrôle de services Windows. Vous ne pouvez pas le changer à mi-chemin.

Et, bien sûr, si vous êtes assez intelligent pour écrire votre propre service, vous êtes suffisamment intelligent pour appeler un homme à la tâche et tout simplement tuer le processus de service. CanStop ne vous empêchera pas de sortir le tapis du service. CanStop indique uniquement au responsable du contrôle de service de ne pas envoyer " Arrêter " commandes au service.

Si vous souhaitez laisser passer quelque chose, utilisez un événement global pour activer / désactiver la vérification du service - ou supprimez simplement les jeux du PC! : -)

Autres conseils

Plutôt que d'essayer d'accéder directement au service et de le contrôler, vous pouvez définir un indicateur (tel que le registre ou un fichier), qui est ensuite vérifié par votre service avant l'exécution de l'événement que vous essayez de contrôler. / p>

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top