Arquivo de Manifesto do UAC
Um manifesto de aplicativo é um arquivo XML que descreve e identifica os assemblies privados e compartilhados aos quais um aplicativo está associado. No Windows 7, o manifesto define entradas para fins de compatibilidade do aplicativo com o UAC.
Todos os aplicativos compatíveis com o UAC devem ter um nível de execução solicitado adicionado ao manifesto de aplicativos. Se o aplicativo exigir acesso administrativo ao sistema, marcá-lo com um nível de execução solicitado de "exigir administrador" (requireAdministrator) garantirá que o sistema consiga
identificar esse programa como um aplicativo administrativo e realizar as etapas de elevação necessárias. Os níveis de execução solicitados especificam os privilégios necessários para um aplicativo e podem ser:
Nível de Execução |
Descrição |
asInvoker |
Utiliza o token do processo pai e nunca solicita elevação. |
highestAvailable |
Utiliza o maior privilégio disponível. Irá solicitar elevação caso o usuário for administrador |
requireAdministrator |
Solicita elevação, a não ser que o processo pai já estiver elevado |
Utilize manifestos para definir qual o nível de privilégio que sua aplicação precisa ser executada visando evitar que o UAC tome essa decisão. Por exemplo, se você executar o Editor de Registros do Windows (RegEdit) a tela de solicitação do UAC será exibida caso o usuário for administrador, conforme a seguir:
A elevação é solicitada, pois o nível de execução do RegEdit está configurado para exigir o direito mais elevado que o usuário possuir. Para verificar o manifesto do RegEdit, abra o RegEdit.exe no Notepad.
Uma outra forma de visualizar, ou até mesmo extrair o manifesto, é através da ferramenta mt.exe que faz parte do Microsoft Windows Software Development Kit (SDK), conforme:
mt.exe -inputresource:c:\windows\notepad.exe -out:c:\temp\notepad.exe.manifest
No manifesto do Notepad, extraído pelo comando acima, é possível observar que o nível de execução solicitado é o asInvoker conforme esperado, uma vez que o Notepad não solicita elevação.
O comando abaixo descreve como incluir um manifesto a um executável:
mt.exe –manifest <path>\aplicacao.exe.manifest –updateresource:<path>\aplicacao.exe
Maiores detalhes da ferramenta mt:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa375649(v=vs.85).aspx
Para configurar o manifesto em um projeto do Visual Studio 2012, adicione o item Application Manifest File ao projeto, conforme:
O manifesto será adicionado ao projeto através do arquivo app.manifest que é configurado por padrão como asInvoker, conforme abaixo: