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.