Uac (user account control) - exécuter une application en tant qu'administrateur sous windows vista

Soyez le premier à donner votre avis sur cette source.

Vue 14 068 fois - Téléchargée 1 385 fois


Description

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).

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_Delphiprog
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
24 -
Même si ce code n'est pas vraiment du Delphi, il demeure très intéressant et les préconisations de Ni69 seront précieuses.
Merci pour ces informations.
cs_MAURICIO
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5 -
Salut ni69,

d' abord laisse moi te féliciter pour cette source hyper simple du problème que je t' ai posé il n' y a que quelques heures de cela...

Les infos que tu donnes plus haut sont justifiées et permettent à ceux qui ne sont pas encore passés sous Vista de régler très facilement un des problèmes lié à l' UAC.

J' ai cependant 3 petites remarques:
-Il me semble qu' il y ait au moins 3 niveaux d' élévation des droits (ici level="requireAdministrator"), il serait interessant de les donner dans ton fichier en commentaire pour que chacun puisse régler l' élévation comme il le veut.
-De plus, l' inclusion de XPMan automatiquement me chiffone un peu.
-Ce que je cherche concrètement c' est l' élévation des droits lorsque je clique sur un bouton qui va executer du code qui necessite l' élévation des droits alors que ta source oblige l' élévation dès le démarrage de l' appli.

Je te mets 10/10 pour cet exemple concrêt car c' est la meilleure source (la plus simple) sur ce sujet que j' ai trouvé jusqu' ici.

Je suis d' accord avec DelphiProg, d' ailleurs, je ne t' ai pas demandé de poster cette source pour rien car je vais m' empresser de l' utiliser même si je m' attends à ce que tu me résouds le 3ème point de mes remarques.

J' aimerai aussi dire que les sources sur delphifr sont de plus en plus interessantes et ça fait plaisir!!! Je ne viens pas souvent car lorsque j' ai un peu de temps je travaille sur la 2ème version de mon pack de compos supervisé par Mr Laborde de chez CodeGear que je posterai courant 2009 (pas de crise de ce côté là!) ...

A+
sp40
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
9 -
Bonjour,

Je dois sûrement mal m'y prendre, mais c'est quand même surprenant... J'ai désactivé il y a quelques temps l'uac sur mon poste vista (pro), car ça me saoulait de cliquer sur "continuer" à chaque fois que je voulais lancer une appli. J'ai donc vu en cette source la solution à ce problème mais :
- J'ai fait un petit exe avec un bouton qui affiche "ok" sur ma machine xp - delphi 5.
- J'ai compilé cet exe deux fois avec la ressource (Project1_uac.exe) et sans la ressource (Project1_ss_uac.exe)
- Je copie le tout sur mon poste vista, sur le bureau. Je constate que le project1_uac.exe a un bouclier windows ajouté sur son icone, alors que celle de project1_ss_uac.exe n'a pas bougé. Et, alors que project1_ss_uac.exe démarre sans problème, project1_uac.exe me demande de confirmer l'exécution de l'application !!!
- Question : que se passe-t-il ?
- Question subsidiaire : A quoi sert l'uac ?

Merci de vos réponses
Simon
sp40
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
9 -
Relisant la description du source, je retire la question subsidiaire.
Est-ce que j'ai mal compris le but de cette source ? Est-ce que son but est non pas d'esquiver les contrôles mais de forcer le contrôle de l'application ?
ni69
Messages postés
1529
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
7 -
@SimonPelloquin:
"que se passe-t-il ?" -> rien d'autre que ce qui est prévu. Une élévation de privilèges est demandée à l'UAC, qui après confirmation d'un administrateur, lance l'application avec les droits d'administrateur.
"A quoi sert l'uac ?" -> tu as trouvé tout seul

Apparement tu as mal compris l'objectif de cette source. Relis bien la description :
"Il existe plusieurs moyens de DEMANDER cette élévation"
Si l'UAC pouvait être contournée aussi facilement, à quoi servirait-elle?

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.