Malgré ce que peuvent en dire certains, je continue de penser que l'UAC est une bonne chose. Le fait de ne pas être tout puissant lorsque l'on est administrateur ou même le fait de pouvoir localement acquérir des droits plus élévés est à mon sens une excellente chose.

Il faut cependant penser ses applications dans ce sens lorsqu'elles doivent toucher à des fonctions gardées par l'UAC (comme le répertoire de Windows, Program Files ou bien encore la base de registre).

Pour ce faire il faut, au sein de son projet Visual Studio 2008, rajouter le fichier suivant (que l'on appelera xxxx.manifest):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly>

Ce qui est important dans ce fichier, c'est la notion de requestedExecutionLevel. Elle peut valoir trois valeurs:

  • asInvoker
  • requireAdministrator
  • highestPossible

Dans notre cas, nous voulons que Vista propose à l'utilisateur une confirmation de l'élévation de droits pour notre application (si nous sommes administrateur) ou une fenêtre de demande de droits (si nous sommes simple utilisateur).

Pour lier le manifest à notre application, cela se passe dans les propriétés de l'application sous Visual Studio 2008 dans l'onglet Application. On y trouve une liste qui nous permet de lier un fichier .manifest du projet à l'application générée.

image

Et le tour est joué :).