none
[RESOLVIDO] Serviço windows - permissão UAC RRS feed

  • Pergunta

  • Estou desenvolvendo um serviço e estou tendo um problema com uma mensagem de confirmação do windows. Provavelmente ocasionada pelo UAC.

    Meu aplicativo executa um serviço e deve ser inicializado cada vez que o windows é inicializado, isso está funcionando. No entanto, cada vez que o serviço vai ser iniciado, o windows apresenta uma mensagem de confirmação. Como faço para essa mensagem de confirmação não aparecer? Sem dar permissão ao usuário e sem mexer nas configurações do UAC, pois o software será instalado na máquina do cliente, que muitas vezes a empresa não deseja alterar as configurações do UAC e o privilégio dos usuários. 

    O aplicativo foi desenvolvido em C no ambiente eclipse. Não foram utilizadas ferramentas da microsoft pois esse aplicativo possui uma versão para linux. Foi criado um instalador para a aplicação utilizando o InnoSetup, onde são copiadas várias dlls necessárias à aplicação. Existe algum registro do windows que deve ser editado ou algo do gênero?


    quinta-feira, 5 de janeiro de 2012 18:05

Respostas

  • Uma solução para o problema foi fazer o serviço ser executado automaticamente pelo windows, e não pelo trayIcon que eu tinha para controlar o serviço.

    Para isso eu criei o serviço através de alguns registros do windows. Segue abaixo as linhas de comando utilizadas no InnoSetup para escrever nos registros.

    ;registros adicionados para controle de permissão
    Root: HKLM; Subkey: SYSTEM\CurrentControlSet\Services\{#ServiceName}; ValueType:string; ValueName:ObjectName; ValueData: "LocalSystem"; Flags: uninsdeletekey;
    Root: HKLM; Subkey: SYSTEM\CurrentControlSet\Services\{#ServiceName}; ValueType:string; ValueName:Description; ValueData: "Servico"; Flags: uninsdeletekey;
    Root: HKLM; Subkey: SYSTEM\CurrentControlSet\Services\{#ServiceName}; ValueType:string; ValueName:DisplayName; ValueData: {#MyAppName}; Flags: uninsdeletekey;
    Root: HKLM; Subkey: SYSTEM\CurrentControlSet\Services\{#ServiceName}; ValueType:expandsz; ValueName:ImagePath; ValueData: {app}\service.exe; Flags: uninsdeletekey;
    Root: HKLM; Subkey: SYSTEM\CurrentControlSet\Services\{#ServiceName}; ValueType:dword; ValueName:ErrorControl; ValueData: 1; Flags: uninsdeletekey;
    Root: HKLM; Subkey: SYSTEM\CurrentControlSet\Services\{#ServiceName}; ValueType:dword; ValueName:Start; ValueData: 2; Flags: uninsdeletekey;
    Root: HKLM; Subkey: SYSTEM\CurrentControlSet\Services\{#ServiceName}; ValueType:dword; ValueName:Type; ValueData: 16; Flags: uninsdeletekey;
    Root: HKLM; Subkey: SYSTEM\CurrentControlSet\Services\{#ServiceName}; ValueType:dword; ValueName:WOW64; ValueData: 1; Flags: uninsdeletekey;

    mais informações nos links abaixo:

    http://support.microsoft.com/kb/259733/pt-br

    http://support.microsoft.com/kb/165748/EN-US

     

    Único problema com essa solução é que o usuário que não for administrador não poderá parar o serviço. Mas isso não é um grande problema para a minha aplicação.


    • Editado Leonardo Rauta sexta-feira, 20 de janeiro de 2012 10:21 Acrescentando informações
    • Marcado como Resposta Leonardo Rauta sexta-feira, 20 de janeiro de 2012 10:21
    sexta-feira, 20 de janeiro de 2012 10:20