Abrir janela de propriedades do windows

21/01/2010

2

Pessoal, tudo certo?

Seguinte, tenho um Serviço do windows que é necessário sempre instalado em um computador alterar o usuário de logon do serviço, para que ele consiga acessar rede, etc. Além de algumas mudanças necessárias quando ocorrer falhas no serviço. Junto com este serviço é instalado outro aplicativo que faz o monitoramento do serviço e apresenta na tela o que o serviço está executando no momento. Através deste aplicativo é possível instalar/desinstalar e iniciar/parar o serviço, para que o usuário não precise acessar a tela de gerenciamento de serviços do windows. Quando o serviço é instalado mesmo assim eu preciso ir nos serviços do windows para configurar o usuário de logon e ações em caso de falha..  o que eu preciso é chamar essa tela (dialog) de propriedades do serviço pelo delphi para que neste aplicativo de monitoramento o usuário possa fazer todas as configurações do serviço. Alguém sabe como posso chamar essa tela de propriedades do serviço pelo delphi ou me dar dicas/pistas? Já procurei no google não encontrei nada.

Abraço

Desde já agradeço.

Kenner Grings

Responder

Posts

não basta você criar uma interface com o usuário que permita editar as propriedades ServiceStartName e Password?

Responder

22/01/2010

Kenner Grings

Pensei inicialmente em fazer isso, porém olhando no registro do windows as configurações que ele salva quando estes dados são preenchidos e a chave do meu serviço ele tem um atributo FailureActions que é um binário e não entendi que informação ele salva. O logon do acesso ele salva o usuário no Atributo ObjectName, mas a senha não encontrei e mesmo assim acredito que deve  haver uma criptografia da mesma para salvar, a qual também não sei como o windows deve fazer.
Sendo assim achei melhor abrir a janela pelo meu sistema para que o usuário informe os dados. Caso haja uma maneira de salvar essas informações por uma interface minha, me ajudem também ou então como abrir a tela.

Desde já agradeço
Obrigado
Responder
mas você já tentou fazer alterando as propriedades?

porque, como você está trabalhando com a classe TService creio que algumas coisas já estejam implementadas.

Por exemplo: como você instala o serviço?
executando Aplicativo.exe /install, certo?
E onde você fez o tratamento, no seu programa, para que o parâmetro install fizesse a instalação do serviço no Windows? Não fez em lugar algum, pois está implementado pela classe TService. Talvez o fato de alterar as propriedades faça a alteração no registro automaticamente.
Responder

22/01/2010

Kenner Grings

Emerson,

Realmente, me passei. Conhecia as propriedades e acabei esquecendo que poderia fazer essa questão com essas propriedades. Desculpa ae. Vou testar a tarde.

Sobre as ações em caso de falha, verifiquei e não encontrei nada na TService para isso, tem alguma dica de como poderia fazer?

Dede já agradeço,
Kenner Grings
Responder

25/01/2010

Kenner Grings

Fiz alguns testes e a alteração das propriedades ServiceStartName e Password não me atendem plenamente. Fiz no meu aplicativo de monitoramento uma interface para que o usuário possa informar o usuário e senha para logon do serviço e salvo em um INI. Porém para que o serviço seja "configurado" com estes parâmetros de logon é preciso setar as propriedades antes de instalá-lo, ou seja, se o usuário alterar o usuário/senha de logon terá que desinstalar e instalar o serviço novamente para que seja carregado com estas configurações. Não basta reinicar o serviço como pelo gerenciamento de serviços do windows. Testei setar as propriedades de logon no onCreate, onStart e onExecutee e o serviço não é setado com as configurações alteradas.

Mesmo assim tem a questão das ações em caso de falha que não consegui salvar/ler os binários no registro do windows e nem como alterar isso pelo serviço.

Alguem tem mais alguma dica de como eu possa abrir a tela de propriedades de um serviço do windows através do Delphi?
Se souberem como abrir a tela de propriedades de pasta, arquivo, etc postem igual, pois posso ter um caminho já.

Desde já agradeço a todos.

Abraço
Kenner Grings
Responder
Na unit WinSvc.pas há várias constantes e funções para trabalho com serviços do Windows. Ali você pode ver algumas das procedures e/ou funções disponíveis na biblioteca advapi32.dll.

Verifique se a função ChangeServiceConfig() pode resolver seu problema.

Responder