2008-10-12 8 views
7

¿Es posible ejecutar programáticamente Python compilado (enviado a través de py2exe) como administrador en Vista?Ejecutando python compilado (py2exe) como administrador en Vista

Algunos más aclaraciones:
He escrito un programa que modifica el archivo hosts de Windows (C: \ Windows \ system32 \ drivers \ etc \ hosts) en Vista, el programa no se ejecutará y fallará con una excepción a menos que haga clic derecho y ejecute como administrador incluso cuando el usuario tenga privilegios de administrador, a diferencia de XP, donde se ejecutará si el usuario tiene derechos de administración, por lo que necesito una forma de elevarlo a los privilegios correctos de forma programática.

Respuesta

5

¿Quiere decir que desea que Windows solicite la elevación cuando se ejecuta su programa? Esto se controla agregando un manifiesto de UAC a los recursos del EXE. This blog entry explica cómo crear el manifiesto y cómo compilarlo en un archivo .RES.

No sé qué características tiene py2exe para incrustar archivos .RES personalizados, por lo que puede necesitar usar la herramienta MT.EXE del Platform SDK para incrustar el manifiesto en su programa. MT.EXE no necesita archivos .RES; puede fusionar el archivo .manifest directamente.

3

Siguiendo el comentario de Roger Lipscombe, he usado un archivo de manifiesto en py2exe sin ningún conocimiento real de lo que estaba haciendo. Por lo que este fuerza de trabajo:

# 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)], 
       }] 
    ) 

Es posible que tenga que hacer un poco de tocar el violín, aunque ..

35

Siguiendo los ejemplos de Python2x\Lib\site-packages\py2exe\samples\user_access_control sólo tiene que añadir uac_info="requireAdministrator" a la consola o ventanas dict:

windows = [{ 
    'script': "admin.py", 
    'uac_info': "requireAdministrator", 
},] 
+1

Mierda ¡Esto funcionó! Muchas gracias, lvaylo, esto era exactamente lo que necesitaba para mi programa. Tan simple también – rocketmonkeys

+0

¿Alguien sabe si hay un equivalente a esto con py2app para solicitar permiso en Mac OS X? – Parker

+0

Esta debe ser la búsqueda de google mejor clasificada para py2exe + UAC. Respuesta perfecta. – Crbreingan

Cuestiones relacionadas