Maneira de parar um serviço do Windows quando CanStop está definido para False (C #)
Pergunta
Ok, então a segunda parte da Eu não tenho nenhuma vontade experimento poder é:
Resumo Pergunta - Existe uma maneira para definir a propriedade CanStop em um serviço do Windows dinamicamente?
Whole Spiel - Eu tenho um serviço que está verificando e matar processos (IE Games) Eu disse para ele se é dia eu não estou autorizado. Ótimo. Eu defini o CanStop como false para que eu não pode simplesmente matar o serviço se eu dou para o vício. Eu tenho um programa que vai ter uma verificação de senha (Alguém digita a senha) que vai parar o serviço se a senha está correta. (Se eu tiver retiradas graves) O problema é usando a classe ServiceController.
Tanto quanto eu posso dizer, ServiceController apenas é um decorador (yah projetar palpite patern) e por isso eu não tenho nenhuma maneira de chegar ao serviço real que ele representa. Primeira tentativa foi Informações de propriedade, mas eu era burro demais para perceber o que isso seria inútil. Segundo foi Informações do campo, porque eu pensei que poderia haver um campo particular que "representa" o serviço. Como você pode imaginar, ambos falharam.
Todas as idéias?
Editar 1 Eu gostaria de evitar ter o valor CanStop em algum lugar que eu possa obtê-lo facilmente como um arquivo de configuração ou registro. Então, eu estou tentando, mas não com sucesso, para fazer esta completamente tratada de programa.
Novo (falhou) Tentativas:
serviço ManagementObject; ManagementBaseObject StopService;
serviço = new ManagementObject ( "Win32_Service.Name = 'StopProgram'");
StopService = serviço .InvokeMethod ( "StopService", null, null);
Não sei se este fez nada. Presumo que não podia parar por causa da situação CanStop.
Solução
O "CanStop" é um atributo do registro de serviços no gerenciador de janelas controle de serviço. Você não pode mudá-lo meio passo.
E, claro, se você é inteligente o suficiente para escrever seu próprio serviço, então você está suficientemente inteligente para abrir tarefa pelo homem e simplesmente matar o processo serviço. CanStop não vai impedi-lo de puxar o tapete de debaixo do serviço. CanStop só diz o gerente de controle de serviço não para enviar comandos "Stop" para o serviço.
Se você quiser permitir que algo para passar, em seguida, usar um evento global para ativar / desativar a verificação do serviço não - ou apenas remover os jogos do PC! : -)
Outras dicas
Ao invés de tentar directamente o acesso e controlar o serviço, você pode definir um algures bandeira, (como o registro ou um arquivo), que é então verificada pelo seu serviço antes de ele executa o Evento que você está tentando controle.