Maneira de parar um serviço do Windows quando CanStop está definido para False (C #)

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

  •  02-07-2019
  •  | 
  •  

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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top