Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

UAC sous Windows 7

4 réponses
Avatar
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

4 réponses

Avatar
Jean-Claude BELLAMY
Le vendredi 26/08/2011 17:39:15, Julien Tartarin a écrit dans le
message <news: ce qui suit :
Bonjour

Quelqu'un connait les API qui permettent d'exécuter une appli en mode Admin
?




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" :


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



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
Avatar
Julien Tartarin
Dans l'article <4e57c8b5$0$30784$, Jean-Claude
BELLAMY écrit:

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" />



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



Avatar
Jean-Claude BELLAMY
Le samedi 27/08/2011 04:10:40, Julien Tartarin a écrit dans le message
<news: ce qui suit :
Dans l'article <4e57c8b5$0$30784$, Jean-Claude
BELLAMY écrit:

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" />



Je veux bien compiler mon appli avec ce fichier manifest. Comment dois-je
l'inclure avec Delphi ?




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 ------------
<?xml version="1.0" encoding="utf-8" ?>
<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>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<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
Avatar
Julien Tartarin
NB: c'est plus long à décrire qu'à faire !!!



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