Estou executando um instalador de aplicativo no Windows 10. Seu manifesto diz que ele deve ser executado com privilégios de administrador. Se eu executar o aplicativo com a configuração de ambiente, __COMPAT_LAYER=RunAsInvoker
o aplicativo deve ser executado como o usuário que está chamando e não solicitar mais elevação. Isso funciona em muitos casos, no entanto, há vários casos em que o aplicativo é iniciado e imediatamente exibe a caixa de diálogo UAC.
Só para ficar 100% claro:
Eu configurei
__COMPAT_LAYER=RunAsInvoker
ao iniciar o aplicativo. Isso geralmente funciona, mas, em alguns casos, o aplicativo ainda pede elevação.User Account Control: Detect application installations and prompt for elevation
Eu configurei a política de segurança como DESATIVADA (pensei que essa seria a correção real, mas não).NÃO quero que o aplicativo seja executado com privs do administrador. Ele não precisa fazer nada que exija admin e, se precisar, quero que ele tente e falhe.
O aplicativo não está exibindo sua própria caixa de mensagem (por exemplo, verificando se pode gravar em %ProgramFiles% e, em seguida, me mostra uma mensagem personalizada. É o prompt do UAC na área de trabalho segura).
Por que isso acontece? Um aplicativo pode continuar solicitando elevação apesar da opção "RunAsInvoker"?
Como posso fazer com que o aplicativo seja executado apenas com o token do usuário atual e simplesmente falhe se tiver permissões insuficientes?
Observe que não consegui encontrar nenhuma resposta além da __COMPAT_LAYER=RunAsInvoker
configuração.
Sim. Simples assim. Ele pode detectar que não está elevado e, em seguida, relançar-se com elevação. Isso acionará o prompt do UAC.
Você não pode parar este comportamento sem modificar o programa ou fazer uso de um parâmetro oculto ou similar já embutido no programa.
Vamos hipoteticamente dizer que para você fazer seu trabalho, você precisa de acesso ao quarto
Maintenance Room
. Você vai lá, mas a porta está trancada.Você vai ao seu gerente e diz que a porta está trancada e que agora você não pode fazer seu trabalho. O gerente pede seu nível de autorização, mas você não quer mostrá-lo ao seu gerente, porque você espera que ele saiba que você deve entrar lá.
Moral da história, não importa se você engana o aplicativo pensando que ele tem direitos quando na verdade não tem. Ele precisa desses direitos para desempenhar funções administrativas e, sem ele, falhará, apenas de uma maneira diferente.
No seu caso, é provável que o instalador grave em um registro ou local de disco ao qual o usuário não tenha acesso de gravação, como
HKEY_LocalMachine
ouC:\Program Files
. Em todos os casos em que uma ação é executada e o usuário também não tem acesso, um prompt do UAC aparecerá para obter acesso para executar essa ação.Certifique-se de que o instalador não grave nesses locais ou aceite o fato de que seu instalador requer elevação.