UAC sous Windows 7
Le
Julien Tartarin

Bonjour
Quelqu'un connait les API qui permettent d'exécuter une appli en mode Admin ?
--
Julien Tartarin
13 rue de l'Hermitage
Le Pallet, 44330
0699951234
ovh@mailjet.com
jt@sdns.fr
Quelqu'un connait les API qui permettent d'exécuter une appli en mode Admin ?
--
Julien Tartarin
13 rue de l'Hermitage
Le Pallet, 44330
0699951234
ovh@mailjet.com
jt@sdns.fr
message
ATTENTION : ne pas confondre :
- l'exécution d'un processus sous un compte donné (ce qui existe depuis
W2K avec la fonction "CreateProcessWithLogonW", et que j'utilise dans
SUperExec)
- l'exécution d'un processus avec un certain niveau de privilèges
(apparu avec UAC, donc depuis Vista), pour laquelle il n'existe pas
d'API.
Par contre, il est possible d'indiquer dans un fichier .manifest dans
quel contexte doit être exécutée l'appli.
P.ex., pour qu'un exécutable requière systématiquement des privilèges
admin, il faut qu'il ait été doté d'un fichier manifest (ou compilé
avec) contenant l'instruction :
<requestedexecutionlevel level="requireadministrator" />
P.ex. pour toutes les applications que je veux être exécutées
obligatoirement avec les privilèges admin, j'utilise ce fichier
"UAC.manifest" :
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="*"
name="UAC_Elevation_Prompt"
type="win32"/>
<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>
Et si l'appli est déjà compilée (sans fichier manifest) , pour obliger
son exécution en tant qu'admin, on peut passer par un script qui fait
appel au verbe "runas" du shell de Windows :
Fichier "elevate.vbs"
----------- couper ici -----------
Set args = Wscript.Arguments
nbargs=args.count
If nbargs=0 Then Wscript.quit
Appli=args(0)
Params=""
For i= 1 To nbargs-1
Params=Params+" "+args(i)
Next
Set Shell=Wscript.CreateObject("Shell.Application")
Shell.ShellExecute Appli,Params,"","runas"
----------- couper ici -----------
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP Expert IT Pro]
http://www.bellamyjc.org ou http://jc.bellamy.free.fr
Je veux bien compiler mon appli avec ce fichier manifest. Comment dois-je
l'inclure avec Delphi ?
--
Julien Tartarin
13 rue de l'Hermitage
Le Pallet, 44330
0699951234
TU crées (sous NOTEPAD p.ex.) un fichier .manifest comme celui que j'ai
donné dans mon message précédent (ici j'ai repris uniquement
l'essentiel), en l'appelant (p.ex.) "RequireAdmin.manifest" :
------------ couper ici ------------
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="X86"
name="Project3" type="win32" />
<description>Privilèges admin obligatoires</description>
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
------------ couper ici ------------
Ensuite, toujours sous NOTEPAD (p.ex.), tu crées un fichier nommé
(p.ex.) "RequireAdmin.rc" contenant cette unique ligne :
------------ couper ici ------------
1 24 "RequireAdmin.manifest"
------------ couper ici ------------
(pour info, 1 est l'ID de la ressource, et 24 son type)
Ensuite, dans une fenêtre de commandes, dans le dossier contenant les 2
fichier .manifest et .rc, tu exécutes la commande suivante :
brcc32 RequireAdmin.rc
Cela va générer un fichier "RequireAdmin.res"
et pour finir, tu insères la ligne suivante dans ton unité principale,
p.ex. après la déclaration "Uses" de "implementation", :
{$R 'RequireAdmin.RES'}
et tu compiles !
Tu peux aussi télécharger un tel fichier .RES depuis mon site, à
l'adresse :
http://www.bellamyjc.org/download/UAC_Manifest.RES
(876 octets)
(si tu optes pour ce fichier, à moins de le renommer, évidemment il
faudra changer la ligne $R... en {$R UAC_Manifest.RES'} )
NB: c'est plus long à décrire qu'à faire !!!
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP Expert IT Pro]
http://www.bellamyjc.org ou http://jc.bellamy.free.fr
Merci Jean-Claude. Je n'imaginais pas que c'était aussi simple. Il suffisait de
connître le type.
Je vais télécharger ton fichier .RES et l'éditer avec XN Resource Editor.
--
Julien Tartarin
13 rue de l'Hermitage
Le Pallet, 44330
0699951234