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: