Como fazer um aplicativo .NET sempre ser executado como administrador? Guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Como fazer um aplicativo .NET sempre ser executado como administrador? (E não enlouquecer)



Olá, colega! Se você já escreveu um utilitário para trabalhar com o registro, instalar serviços do Windows ou apenas tentou salvar um arquivo em C:\\Program Files, certamente já passou por isso: o aplicativo trava com o erro "Access Denied", o usuário dá de ombros e você coça a cabeça. Situação familiar? Bem-vindo ao mundo do UAC (User Account Control) e da eterna luta por privilégios de administrador.



Hoje vamos analisar a pergunta mais popular no Stack Overflow (sim, aquela com milhares de visualizações): "How do I force my .NET application to run as administrator?". Não vamos apenas copiar a resposta, vamos entender como funciona e escrever um código elegante em C#. Vamos lá!



Por que não é tão simples? A magia do UAC



O Windows, desde o Vista, não confia em aplicativos por padrão. Mesmo que você esteja logado como "Administrador", seu processo recebe um token com privilégios filtrados. Isso é feito por segurança: para que um vírus não possa simplesmente sobrescrever arquivos do sistema.



Quando você executa um .exe, o sistema verifica seu manifesto. Se não houver uma marcação especial, o aplicativo é executado com privilégios de usuário comum. Nossa tarefa é adicionar essa marcação.



Método 1: Adicionando o manifesto (caminho correto para .NET Framework)



Esta é a maneira padrão e mais simples para aplicativos clássicos Windows Forms ou WPF no .NET Framework.



Passo 1: Criar ou editar o arquivo app.manifest



No Visual Studio, clique com o botão direito no projeto → Add → New Item → Application Manifest File. Se o arquivo já existir (por exemplo, app.manifest), basta abri-lo.



Você verá um XML com vários comentários. A seção que nos interessa é requestedExecutionLevel. Deixe-a assim:



<?xml version="1.0" encoding="utf-8"?><assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">    <security>      <requestedPrivileges>        <!-- IMPORTANTE: Esta linha -->        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />      </requestedPrivileges>    </security>  </trustInfo></assembly>


Observe o level="requireAdministrator". Existem outros dois valores:

  • asInvoker — execução com os privilégios do processo pai (padrão).
  • highestAvailable — execução com os privilégios máximos disponíveis para o usuário atual.


Passo 2: Vincular o manifesto ao projeto (se não funcionar automaticamente)



Abra as propriedades do projeto (clique com o botão direito no projeto → Properties). Na guia Application, encontre a seção Resources e, na lista suspensa "Manifest", selecione "app.manifest".



Pronto! Agora, ao executar seu .exe, o Windows exibirá imediatamente a janela do UAC: "Permitir que este aplicativo faça alterações no seu dispositivo?". Se o usuário clicar em "Sim", o aplicativo receberá privilégios totais de administrador.



Método 2: Reinicialização programática com elevação (para .NET Core / .NET 5+)



Este método é universal e funciona até mesmo no .NET Core, .NET 5/6/7/8 e .NET Framework. Às vezes, o manifesto não é adequado porque:

  • Você quer que o aplicativo seja executado sem privilégios, mas algumas funções exigem elevação.
  • Você está usando um aplicativo de console ou serviço.


A ideia é simples: o aplicativo verifica se tem privilégios. Se não tiver, ele executa a si mesmo novamente, mas com a chave runas (de

Blogs

Book Recommendations