Ausführen kompiliert Python (py2exe) als Administrator in Vista
-
10-07-2019 - |
Frage
Ist es möglich laufen programaticly Python kompiliert (comiled via py2exe) als Administrator in Vista?
Einige weitere Klarstellung:
Ich habe ein Programm geschrieben, das die Windows-Hosts-Datei ändert (c: \ Windows \ system32 \ drivers \ etc \ hosts) in Vista wird das Programm nicht ausgeführt und wird mit einer Ausnahme fehlschlagen, wenn Sie mit der rechten Maustaste und als Administrator ausführen, auch wenn die Benutzer haben Administratorrechte, anders als in XP, wo es ausgeführt wird, wenn die Benutzer Administrationsrechte haben, so dass ich brauche eine Möglichkeit, es auf die richtigen Berechtigungen zu erhöhen programaticly.
Lösung
Wollen Sie damit sagen, dass Sie Windows für Erhebung gefragt werden soll, wenn Ihr Programm ausgeführt wird? Dies wird durch das Hinzufügen eines UAC Manifests auf die Ressourcen des EXE gesteuert. Dieser Blog-Eintrag erklärt, wie das Manifest erstellen und wie es in eine Re-Datei zu kompilieren.
Ich weiß nicht, was Einrichtungen Py2exe zum Einbetten Brauch hat .res Dateien, so dass Sie das MT.EXE Werkzeug aus dem Platform SDK verwenden können müssen, um das Manifest in Ihrem Programm einzubetten. MT.EXE nicht .RES Dateien benötigen; es kann direkt die manifest-Datei zusammenführen.
Andere Tipps
die Beispiele aus Python2x\Lib\site-packages\py2exe\samples\user_access_control
Nach nur uac_info="requireAdministrator"
hinzufügen zu trösten oder Fenster dict:
windows = [{
'script': "admin.py",
'uac_info': "requireAdministrator",
},]
Nach Roger Lipscombe Kommentar oben habe ich eine Manifestdatei in py2exe ohne wirkliche Kenntnis dessen, was früher ich tat. Also die Macht Arbeit:
# 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)],
}]
)
Sie müssen möglicherweise etwas Fummelei tun, obwohl ..