Question

Est-il possible d'exécuter par programmation Python compilé (compilé via py2exe) en tant qu'administrateur dans Vista?

Quelques précisions supplémentaires:
J'ai écrit un programme qui modifie le fichier hosts de Windows (c: \ Windows \ system32 \ drivers \ etc \ hosts) sous Vista. Le programme ne s'exécutera pas et échouera avec une exception, sauf si vous cliquez avec le bouton droit de la souris et vous exécutez en tant qu'administrateur, même si le L’utilisateur a des privilèges d’administrateur, contrairement à XP où il s’exécutera s’il possède des droits d’administrateur. Il me faut donc un moyen de l’élever au niveau des privilèges appropriés par programmation.

Était-ce utile?

La solution

Voulez-vous dire que vous voulez que Windows demande une élévation lorsque votre programme est exécuté? Ceci est contrôlé en ajoutant un manifeste UAC aux ressources du fichier EXE. Cette entrée de blog explique comment créer le manifeste et comment pour le compiler dans un fichier .RES.

Je ne sais pas quelles sont les fonctionnalités disponibles dans py2exe pour incorporer des fichiers .RES personnalisés. Vous devrez donc peut-être utiliser l'outil MT.EXE à partir du Kit de développement Platform SDK pour intégrer le manifeste à votre programme. MT.EXE n'a pas besoin de fichiers .RES; il peut fusionner directement le fichier .manifest.

Autres conseils

En suivant les exemples de Python2x \ Lib \ site-packages \ py2exe \ samples \ user_access_control ajoutez simplement uac_info = " requireAdministrator & à la console ou à Windows dict:

windows = [{
    'script': "admin.py",
    'uac_info': "requireAdministrator",
},]
Pour faire suite au commentaire de Roger Lipscombe, j’ai utilisé un fichier manifeste dans py2exe sans aucune connaissance réelle de ce que je faisais. Donc, cela pourrait fonctionner:

# in setup.py
# manifest copied from http://blogs.msdn.com/shawnfa/archive/2006/04/06/568563.aspx
manifest = '''
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
       <asmv3:trustInfo xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
         <asmv3:security>
           <asmv3:requestedPrivileges>
             <asmv3:requestedExecutionLevel
               level="asInvoker"
               uiAccess="false" />
           </asmv3:requestedPrivileges>
         </asmv3:security>
       </asmv3:trustInfo>
     </assembly>
'''

setup(name='MyApp',
      #...
      windows=[ { #...
                  'other_resources':[(24, 1, manifest)],
                 }]
     )

Cependant, vous devrez peut-être jouer du violon.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top