L'UAC (User Account Control) est une protection inhérente à Windows Vista, permettant de protéger le système contre toute action potentiellement néfaste. Parfois cependant des programmes nécessitent une élévation de privilèges pour garantir leur bonne exécution (accès à des répertoires système, modification de certains paramètres de Windows, accès direct en lecture/écriture au disque système, etc...).
Il existe plusieurs moyens de demander cette élévation :
-> en cochant la case "Exécuter en tant qu'Administrateur" dans l'onglet "Compatibilité" des propriétés de l'exécutable
Mais alors si l'on veut distribuer le programme sur internet ou sur d'autres types de supports, chaque copie devra être traitée ainsi, ce qui est loin d'être réalisable en pratique
-> tout simplement en incluant dans le nom de votre exécutable un des mots "install", "setup" ou bien "update"
Mais alors tout changement du nom du fichier mènerait vers la perte de l'automatisation du processus de requête.
-> en incluant un Manifest à l'intérieur même de l'exécutable, par l'intermédiaire d'un fichier de ressource (.res)
C'est cette méthode qui est présentée ici. Le fichier RES déjà compilé est également fourni dans le zip.
Note : Cette source n'a pas pour objectif de faire une présentation exhaustive de l'User Account Control de Windows Vista. Cela serait totalement inutile étant donné l'existence de nombreux sites dispensant des informations sur le sujet. Vous pouvez par exemple aller voir sur MSDN si vous désirez en savoir davantage sur l'UAC :
http://msdn.microsoft.com/en-us/library/bb384608.aspx
Source / Exemple :
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="*"
name="UAC_Elevation_Prompt"
type="win32"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator"/>
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="*"/>
</dependentAssembly>
</dependency>
</assembly>
Conclusion :
!!!!! ATTENTION REMARQUES IMPORTANTES !!!!!
VEILLEZ A RETIRER "XPMan" DE USES POUR ASSURER LE BON FONCTIONNEMENT DE LA GESTION DE L'UAC
En pratique, l'ajout de XPMan provoque la création d'un autre Manifest à l'index 1, qui RECOUVRE celui qui est mis en place ici par l'intermédiaire du fichier de ressources. Ainsi, la gestion de l'UAC est éliminée !
Remarque importante 1 : J'ai inclus les valeurs du Manifest produit par XPMan dans celui de gestion de l'UAC. Ainsi, le style XP/Vista des applications sera conservé malgré l'absence de composant XPMan.
Remarque importante 2 : Si vous avez une version antérieure à Delphi 7 et que vous avez l'habitude d'ajouter en ressource un fichier comme "WindowsXP.res", "XPMan.res", sachez que cet avertissement vous concerne également et que vous devez supprimer ces fichiers (ils produisent le même effet que l'ajout de XPMan dans uses).
15 oct. 2013 à 17:51
Comprends pas... Cette source marchait à merveille, et là, ça ne marche plus, le programme démarre sans demander l'élévation... Elle m'est demandée si je l'exécute en mode de compatibilité pour windows XP SP3. Testé sur mon poste Windows 7 pro et sur un serveur en Windows Server 2008 R2...
19 avril 2013 à 20:51
20 avril 2010 à 13:28
A+
20 avril 2010 à 13:26
j' ai profité de ton source pour utiliser un activeX sans l' enregitrer au préalable sous Windows.
Par contre, j' ai dû copier une partie de ton code (celle concernant l' activation des thèmes) car sinon les thèmes n' étaient plus activés.
N' y a t- il pas un moyen de créer une resource pour l' élévation des droits independemment du fait que l' on choisit d' utiliser les thèmes?
A+
1 avril 2010 à 08:55
Unable to create process : The requested operation requires elevation.
Est ce quelqu'un pourai m'aider pleassse.
Merci d'avance
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.