python windows-vista permissions py2exe

Ejecutando Python compilado(py2exe) como administrador en Vista



windows-vista permissions (3)

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

Algo más de aclaración:
He escrito un programa que modifica el archivo de 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 se ejecute como administrador incluso cuando el el usuario tiene 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.


¿Quiere decir que quiere que Windows solicite la elevación cuando se ejecuta su programa? Esto se controla agregando un manifiesto de UAC a los recursos del EXE. Esta entrada de blog 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 es posible que necesite 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.


Siguiendo el comentario de Roger Lipscombe, he usado un archivo de manifiesto en py2exe sin ningún conocimiento real de lo que estaba haciendo. Entonces esto podría funcionar:

# 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 tengas que hacer algunos ajustes aunque ...


Siguiendo los ejemplos de Python2x/Lib/site-packages/py2exe/samples/user_access_control simplemente agregue uac_info="requireAdministrator" a la consola o dict de Windows:

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