Modo per interrompere un servizio di Windows quando CanStop è impostato su False (C #)

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

  •  02-07-2019
  •  | 
  •  

Domanda

Ok, quindi la seconda parte di Non ho volontà esperimento di potenza è:

Domanda di riepilogo - Esiste un modo per impostare dinamicamente la proprietà CanStop su un servizio Windows?

Whole Spiel - Ho un servizio che sta attualmente controllando e uccidendo i processi (IE Games) a cui ho detto se è il giorno in cui non mi è permesso. Grande. Ho impostato CanStop su false in modo che non posso semplicemente uccidere il servizio se cedo alla dipendenza. Ho un programma che avrà un controllo della password (qualcun altro inserisce la password) che interromperà il servizio se la password è corretta. (Se ho ritiri gravi) Il problema sta utilizzando la classe ServiceController.

Per quanto ne so, ServiceController è solo un decoratore (yah design patern indovinare) e quindi non ho modo di ottenere il servizio effettivo che rappresenta. Il primo tentativo è stato Info proprietà, ma ero troppo stupido per rendermi conto di cosa sarebbe stato inutile. Il secondo era Field Info perché pensavo che potesse esserci un campo privato che "rappresenta" il servizio. Come puoi immaginare, entrambi fallirono.

Qualche idea?

MODIFICA 1 Vorrei evitare di avere il valore CanStop da qualche parte in cui posso accedervi facilmente come un file di configurazione o un registro. Quindi sto tentando, anche se non con successo, di farlo completamente gestito nel programma.

Nuovi tentativi (non riusciti):

  

Servizio ManagementObject;   ManagementBaseObject stopService;

     

servizio = nuovo   ManagementObject (" Win32_Service.Name = 'StopProgram' ");

     

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

Non sono sicuro che abbia fatto qualcosa. Presumo che non possa fermarsi a causa della situazione CanStop.

È stato utile?

Soluzione

Il " CanStop " è un attributo della registrazione dei servizi nel gestore controllo servizi di Windows. Non puoi cambiarlo a metà strada.

E, naturalmente, se sei abbastanza intelligente da scrivere il tuo servizio, allora sei abbastanza intelligente da far apparire task-man e semplicemente uccidere il processo di servizio. CanStop non ti impedirà di estrarre il tappeto da sotto il servizio. CanStop dice solo al responsabile del controllo del servizio di non inviare " Stop " comandi al servizio.

Se vuoi consentire il passaggio di qualcosa, usa un evento globale per abilitare / disabilitare il controllo del servizio - o semplicemente rimuovere i giochi dal PC! : -)

Altri suggerimenti

Invece di provare ad accedere e controllare direttamente il Servizio, potresti impostare un flag da qualche parte (come il registro o un file), che viene quindi controllato dal tuo servizio prima che esegua l'Evento che stai cercando di controllare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top