Delphi XE2: Executando Automaticamente Privilégios de Administrador

Veja neste artigo como configurar sua aplicação para ser executada automaticamente com privilégios de Administrador, tendo permissão, por exemplo, para alterar o registro do Windows.

Olá Pessoal! Essa semana eu me deparei com um enorme problema em minha aplicação. Eu precisava que esta iniciasse quando o Windows fosse inicializado. Ao rodar a aplicação no Windows XP tudo rodou perfeitamente, entretanto, ao rodar no Windows Vista e Seven a situação se complicou, pois a aplicação só acessa os registros do Windows se for executada como administrador ou em modo de compatibilidade XP. E como precisamos que a aplicação se inicie automaticamente não podemos ficar contanto com a boa vontade do usuário de ficar configurando o executável. Nem consigo imaginar o número de ligações de suporte. Como ferramentas de trabalho, estaremos utilizando o Delphi XE2 e o Notepad.

Os passos a seguir requerem muita atenção para perfeito funcionamento.

Abra o NotePad (Bloco de Notas) de seu computador e insira os seguintes códigos XML:

Listagem 1: Win7UAC.manifest

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32" name="ProjetoTeste.exe" version="3.1.0.0" processorArchitecture="*"/> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" publicKeyToken="6595b64144ccf1df" language="*" processorArchitecture="*"/> </dependentAssembly> </dependency> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <!--The ID below indicates application support for Windows Vista --> <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> <!--The ID below indicates application support for Windows 7 --> <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> </application> </compatibility> </assembly>

Figura 1: Win7UAC.manifest

Na 3ª linha substitua o nome do ProjetoTeste.exe pelo SeuProjeto.exe. Clique em Save As (Salvar Como) e atribua o seguinte nome “Win7UAC.manifest”. O arquivo deve ser salvo no mesmo diretório do executável.

Abra novamente o Notepad (bloco de notas) em branco e insira o seguinte código:

Listagem 2: Win7UAC.rc

1 24 "Win7UAC.manifest"

Figura 2: Win7UAC.rc

Clique em Save As (Salvar Como) e atribua o seguinte nome “Win7UAC.rc”. Salve, também, este arquivo no mesmo diretório do executável.

Agora, vamos adicionar este último arquivo ao nosso projeto. No Menu principal do Delphi vá até Project | Add to Project e selecione o arquivo “Win7UAC.rc”. Na TreeView do Project Manager deverá aparecer o arquivo adicionado conforme figura abaixo:


Figura 3: Win7UAC no Project Manager

Compile a aplicação. Após o fim da compilação vá até o diretório do executável e verifique se foi criado o arquivo Win7UAC.RES. Esse arquivo deve ser usado como opção de inicialização do sistema e é através dele que serão dados os privilégios de rodar como administrador automaticamente. Quando compilamos uma aplicação, ela automaticamente gera um arquivo SeuProjeto.RES que será usado como Manifest inicial. O que iremos fazer é substituir esse arquivo pelo nosso manifest.

Assim sendo, vá até o Menu Project | Options | Application e onde estiver marcada a opção “Enable RunTime Themes” substitua por “Use Custom Manifest”. Logo abaixo aparecerá uma opção para que você selecione o arquivo manifest que deseja utilizar. Selecione o arquivo “Win7UAC.manifest” criado e execute sua aplicação.


Figura 4: Customizando o arquivo Manifest

Execute sua aplicação e verá que não será mais exigido o privilégio de administrador para a utilização e manipulação de registros.

Um grande abraço e até o próximo artigo.

Artigos relacionados