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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top