begin process at 2010 03 18 12:01:57
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Exécution

 > UAC (USER ACCOUNT CONTROL) - EXÉCUTER UNE APPLICATION EN TANT QU'ADMINISTRATEUR SOUS WINDOWS VISTA

UAC (USER ACCOUNT CONTROL) - EXÉCUTER UNE APPLICATION EN TANT QU'ADMINISTRATEUR SOUS WINDOWS VISTA


 Information sur la source

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Exécution Classé sous :UAC, vista, administrateur, privilège, droits Niveau :Débutant Date de création :16/01/2009 Date de mise à jour :16/01/2009 23:18:53 Vu / téléchargé :3 649 / 376

Auteur : ni69

Ecrire un message privé
Site perso
Commentaire sur cette source (18)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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

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

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   Resources
    • UAC_Manifest.manifestTélécharger ce fichier [Réservé aux membres club]812 octets
    • UAC_Manifest.RCTélécharger ce fichier [Réservé aux membres club]Voir ce fichier28 octets
    • UAC_Manifest.RESTélécharger ce fichier [Réservé aux membres club]876 octets
  • Main.dfmTélécharger ce fichier [Réservé aux membres club]1 806 octets
  • Main.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier2 945 octets
  • RunAsAdmin.bdsprojTélécharger ce fichier [Réservé aux membres club]8 639 octets
  • RunAsAdmin.dprTélécharger ce fichier [Réservé aux membres club]Voir ce fichier245 octets
  • RunAsAdmin.resTélécharger ce fichier [Réservé aux membres club]5 304 octets

Télécharger le zip


 Historique

16 janvier 2009 23:18:53 :
Ajout de la prise en compte du style Windows XP/Vista dans le Manifest concernant l'UAC. Ajout d'un avertissement important.

 Sources du même auteur

Source avec Zip Source avec une capture RESTAURATION DE FICHIERS SUPPRIMÉS SUR UN DISQUE DUR NTFS
Source avec Zip Source avec une capture EASYCOMPRESSJPG V4 - COMPRESSION AVANCÉE D'IMAGES EN JPEG
Source avec Zip Source avec une capture MODIFIER LES DATES DE CRÉATION, DE MODIFICATION ET DE DERNIE...
Source avec Zip Source avec une capture LISTER LES PÉRIPHÉRIQUES DU SYSTÈME (WINDOWS XP)
Source avec Zip Source avec une capture RETRANSMISSION DE TOUS LES PARAMÈTRES VERS UNE SEULE APPLICA...

 Sources de la même categorie

Source avec Zip Source avec une capture SURVEILLANCE DU CONTENU D'UN DOSSIER par botelec
Source avec Zip GÉNÉRATEUR DE JET DE DÉS par koriteki
Source avec Zip Source avec une capture LES FIBERS : DES THREADS NON PRÉEMPTÉS PAR LE SYSTÈME par Caribensila
BLOQUER LE TASKMGR SANS CLÉ DE REGISTRE par craftsystem
Source avec Zip UTILISER LES MESSAGES WINDOWS POUR GERER LE NOMBRE D'INSTANC... par lotfi213_b19

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture UNITÉ DE SUPPORT VISTA par Bacterius
Source avec Zip Source avec une capture EFFET VITRE ET THUMBNAILS SOUS VISTA par Bacterius
Source avec Zip UN TASKDIALOG EN TROIS CLICKS par chramade
Source avec Zip TRUC UTILE POUR PROTEGER SES DROITS D'AUTEUR EN DELPHI par greatmonarch
Source avec Zip UTILITAIRE POUR LANCER UN PROGRAMME DEPUIS UN AUTRE COMPTE (... par Forman

Commentaires et avis

Commentaire de Delphiprog le 17/01/2009 09:43:57 administrateur CS

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.

Commentaire de MAURICIO le 19/01/2009 11:32:25 10/10

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+

Commentaire de simonpelloquin le 20/01/2009 09:00:09

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

Commentaire de simonpelloquin le 20/01/2009 09:05:16

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 ?

Commentaire de ni69 le 20/01/2009 12:48:56

@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?

Commentaire de simonpelloquin le 20/01/2009 12:56:05

Merci pour la réponse,

Si j'ai bien compris, en fait une "élévation" de privilèges permet à un utilisateur lambda de lancer l'appli avec les droits d'admin, et ainsi d'avoir accès par exemple à la base de registre etc. Mais alors, n'existe-t-il pas un moyen de mémoriser le fait que l'utilisateur a validé l'utilisation de l'appli en tant qu'admin une fois pour toute, de façon à ce qu'il ne soit pas obligé de valider cette fenêtre (continuer ou annuler) à chaque démarrage de l'appli ? Par ailleurs, pourquoi cette fenêtre s'affiche quand même sur un compte d'administrateur ?

Commentaire de ni69 le 20/01/2009 13:04:36

@Delphiprog : Merci!


@Mauricio: Merci également!
Pour répondre à ta question, les trois apramètres disponibles sont les suivants :
AsInvoker = l'application se lance avec les mêmes privilèges que le programme qui l'a exécutée (donc explorer la plupart du temps)
HighestAvailable = l'application s'exécute avec les plus hauts privilèges disponibles pour l'utilisateur connecté
RequireAdministrator = l'application n'exécutera avec les privilèges administrateurs UNIQUEMENT si un administrateur l'autorise

Dans le cas où l'on nécessite l'accès à des ressources protégées du système (registre, disque, ...), il faudra donc systématiquement choisir le troisième paramètre, à savoir RequireAdministrator (par précaution, car si l'application doit être distribuée, tous les comptes utilisateurs où elle sera exécutée n'auront pas par défaut les mêmes droits)

"l'inclusion de XPMan automatiquement me chiffone un peu" -> Je ne comprends pas vraiment... Si le code doit être exécuté sur Vista, alors autant qu'il prenne le style Vista non ?
Quoiqu'il en soit il suffit de supprimer le noeud <dependency> du Manifest pour enlever XPMan (après il faudra bien sûr recompiler la ressource!)

"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 regarderai ça :)


@SimonPelloquin:
"une élévation de privilèges permet à un utilisateur lambda de lancer l'appli avec les droits d'admin" -> c'est cela.
"moyen de mémoriser" -> Non, ce serait contraire au fonctionnement de l'UAC
"pourquoi cette fenêtre s'affiche quand même sur un compte d'administrateur" -> parceque quand l'UAC est activée, un compte administrateur est toujours protégé! Je te renvoie encore une fois aux documentations sur l'UAC

Commentaire de MAURICIO le 20/01/2009 13:11:42

"Quoiqu'il en soit il suffit de supprimer le noeud <dependency> du Manifest pour enlever XPMan (après il faudra bien sûr recompiler la ressource!)
"
Merci !!! Le problème étant que si mon programme utilise XPMan et une dll avec des forms, celles-ci me renvoient une erreur quand je les ferme ?!

J' espère que tu trouveras comment élever (et pourquoi pas baisser) l' élévation que dans une certaine partie du code.

Pour répondre à Simon, ce n' est pas l' utilisateur qui a besoin d' une élévation des droits mais les programmes!!!

A+

Commentaire de simonpelloquin le 20/01/2009 13:33:59

Merci encore pour les réponses,

A Mauricio : "Ce n' est pas l' utilisateur qui a besoin d' une élévation des droits mais les programmes!!!", ça, c'est ok.

A NI69 : Pardon d'être lourd, mais avec HighestAvailable, est-ce que le problème est le même ?

D'une manière générale, c'est quand même désagréable de passer systématiquement par cet écran de validation pour lancer une appli. Et je ne veux pas faire désactiver l'uac sur tous les postes de nos clients... C'est quoi la prochaine étape de chez MS ? un écran pour valider la validation ??? On s'en sort plus... J'ai vraiment du mal à saisir l'intérêt d'un tel dispositif sur des machines de particuliers (surtout que l'uac est installé par défaut). Il y a un moment où l'utilisateur doit savoir se servir d'une machine et doit pouvoir lancer ses programmes de tous les jours sans être obligé de passer par des contrôles de la sorte, non ?

Commentaire de ni69 le 20/01/2009 13:50:57

@SimonPelloquin: même avec HighestAvailable sur un compte admin tu auras la validation.
Rappelle-toi encore ce que j'ai cité tout à l'heure : "Il existe plusieurs moyens de DEMANDER cette élévation"
"J'ai vraiment du mal à saisir l'intérêt d'un tel dispositif sur des machines de particuliers" -> nombre de risques sont évités grâce à cela.
Dans Windows Se7en le niveau de contrôle de l'UAC sera paramétrable.

Commentaire de simonpelloquin le 20/01/2009 14:09:38 10/10

Merci beaucoup pour tous ces renseignements et pour ta patience. J'arrête là.

"Dans Windows Se7en le niveau de contrôle de l'UAC sera paramétrable." pfff, je sais pas si je vais pas me mettre à développer sous linux...

Commentaire de MAURICIO le 20/01/2009 14:47:30

Salut Simon,

il est évident qu' avec Vista, il est plus difficile d' attraper un virus grâce à l' UAC, moi je suis pour car ce n' est pas si enervant que ça et que nous programmeurs, on s' habitue à éviter de toucher à certaines zones du Regitry par exemple pour justement, éviter les messages d´élévation de droits au démarrage de nos applis...

Par contre, l' UAC ce n' est pas pour les débutants comme tu le penses, qui,  auront à mon avis la mauvaise habitude de permettre l' execution de tout et n' importe quoi car ils ne savent pas distinguer l' execution d' un programme voulu d' une saleté de virus!!!

A+

Commentaire de simonpelloquin le 20/01/2009 16:39:13

A Mauricio :

D'accord, l'idée est bonne... mais il manque un peu d'intelligence la dedans... Du genre quand l'utilisateur a déjà lancé une bonne dizaine de fois l'application, l'uac pourrait en tenir compte (sauf bien sûr si l'appli est soudain vérolée aarrrgghhh, encore qu'on peut voir si l'exécutable a été modifié)
J'ai un peu cherché sur le net et, apparemment, c'est aussi un peu fait pour décourager les developpeurs de toucher aux éléments vitaux de l'OS. D'où mon nouveau post sur le forum : comment associer une icone sans passer par la base de registre. pfiou... ça fait mal à la tête tout ça.

Commentaire de keplin le 22/12/2009 00:26:25

                        :)   un an plus tard ou presque

j'avais juste envie de faire une remarque concernant tout ceci...

1) la seule réelle parade contre les virus sur vista c'est un bon antivirus  

2) si on a le malheur d'en choper un qui n'est pas reconnue par l'antivirus c'est le bordel
   ses codes malveillants on tous les droits, écrire sur la base de registres ouvrir des
   ports effacer des fichiers etc.  ça veux dire donc que grâce a du code on peut
   contourner UAC... alors pourquoi nous emmerder avec ça alors que, comme dit plus haut
   la plupart des utilisateurs cliquent a tout va pour accepter l'exécution de n'importe
   quel programmes.

   il y a moyen via je ne sais quel code de passer outre l'UAC , et ceux qui pour des
   raisons tout a fait bienveillantes veulent faire une application qui sauvegarde une
   petite donné dans la br ou veullent changer l'heure système doivent chercher mille et
   une façon pour y arriver ou cliquer.. "oui j'accepte l'exécution" pffff

   c'est du n'importe quoi.............



Commentaire de Ulixes2 le 29/12/2009 11:17:58

Bonjour,

Etant un débutant, je dois surement mal m'y prendre, mais l'ajout de ce code n'a strictement rien changé. En effet sous vista au lancement de l'appli, l'UAC ne me demande de pas de valider comme quoi je suis en mode admin.

Question subsidiaire, techniquement cette astuce devrait aussi fonctionner sous Windows 7

Merci d'avance

Commentaire de ni69 le 10/01/2010 15:59:48

@Ulixes2 : As-tu bien suivi mes indications (précédées de "REMARQUES IMPORTANTES") dans la partie "Conclusion" de cette page ?

Ce code est également pleinement compatible avec Windows 7.

Commentaire de Ulixes2 le 11/01/2010 09:42:38

NI69: En effet, j'avais bien les toutes tes remarques et j'avais enlevé le XPMan des uses comme tu l'indiquais et je suis sous Delphi7. Peux être ai je mal fais "l'association" au fichier .res. Il n'y a bien que cette ligne à inclure : {$R 'Resources\UAC_Manifest.RES'}. Il n'y a rien a modifier aux fichiers fournit dans ton dossier ressources?

Merci d'avance.

Commentaire de ni69 le 13/03/2010 15:42:09

Après vérification de la validité du code ici présent sur plusieurs systèmes Windows Vista & Seven, il semble que le problème soit présent uniquement de ton côté.
As-tu bien configuré l'UAC (sous Seven) pour que l'avertissement s'affiche ? Le code source d'exemple "RunAsAdmin" s'exécute-t-il correctement chez toi ?

Veille à bien retirer toute mention de XPMan dans l'intégralité des clauses uses de ton projet. De même, si ton projet inclus d'autres ressources, veille à ce qu'il n'y ait pas de conflit.

L'ajout de
{$R 'Resources\UAC_Manifest.RES'}
est en effet la seule chose à réaliser si tant est que le fichier 'Resources\UAC_Manifest.RES' existe bien.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Quelle m**** cet UAC !!! ( delphi - firebird - vista - uac ) [ par simonpelloquin ] BonjourPermettez-moi de vous faire part de mes mésaventures sur Vista et cette belle ********* d'UAC. On va pas s'étendre sur le fait que c'est un out Droits administrateur limités [ par AEC1 ] Bonjours, j'ai installé une application base de données paradox7 sur une machine qui est reliée à un réseau Intranet d'entreprise. pas de problème pou UAC vista [ par RoOotsy ] Bonjour a tousAlors voila mon problème !Je joue a un jeu en ligne (ragnarok) depuis un compte utilisateur donc non administrateur et L'UAC est activé. Delphi et Vista [ par dugueclin ] Bonjour à tous,J'ai deux problèmes avec Delphi et Vista.J'ai réalisé un project avec un TAnimate;Après l'avoir placé dans la forme, avec la propriété Tshellressource [ par dugueclin ] bonjour à tous,J'utilise delphi sous vista et les animations ne sont plus présentes sous Vista."Les animations shell de Windows Vista ne sont plus acc multiTâche et multi-coeur (Xp/Vista/Seven) [ par botelec ] Bonjour à tous, Je fais court, histoire de me faire comprendre. Après plusieurs jours de tests, (et oui!) j'ai enfin déterminé d'ou vient la source Conseil pour acceder à une base access avec differents droits [ par yannba ] Bonjour, Le programme que je crée est pour une association. Il sera utilisé par un administrateur (moi), secretaire, utilisateurs, ... Bref chaque pr Installation -Exécution d'une application delphi [ par habib1976 ] salut tout le monde, en fait j'ai 2 questions:1- j'ai crée le programme d'installation de mon application (delphi6 avec une base de données paradox) q Ouvrir et lire un fichier ZIP avec Vista Premium x86 SP1 [ par SOURCECONNECT ] Bonjour, Je viens de télécharger le fichier zip UAC (USER ACCOUNT CONTROL) - EXÉCUTER UNE APPLICATION EN TANT QU'ADMINISTRATEUR SOUS WINDOWS VISTA? ma


Nos sponsors


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,872 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales