2008-10-12 16 views
7

Ist es möglich, kompilierte Python (über py2exe gepackt) als Administrator in Vista?Ausführen von kompilierten Python (py2exe) als Administrator in Vista

Einige weitere Klarstellung:
ich ein Programm geschrieben haben, dass die Windows-Hosts-Datei (c: \ Windows \ system32 \ drivers \ etc \ hosts) ändert in Vista wird das Programm nicht ausgeführt und wird, wenn Sie mit einer Ausnahme fehlschlagen Klicken Sie mit der rechten Maustaste, und führen Sie als Administrator aus, auch wenn der Benutzer Administratorrechte hat, anders als in XP, wo es ausgeführt wird, wenn der Benutzer Administratorrechte hat, also muss ich es auf die richtigen Berechtigungen programmatisch erhöhen.

Antwort

5

Meinst du, dass Windows eine Erhöhung verlangen soll, wenn das Programm ausgeführt wird? Dies wird durch Hinzufügen eines UAC-Manifests zu den EXE-Ressourcen gesteuert. This blog entry erläutert, wie das Manifest erstellt und in eine RES-Datei kompiliert wird.

Ich weiß nicht, welche Einrichtungen py2exe zum Einbetten benutzerdefinierter .RES-Dateien enthält. Daher müssen Sie möglicherweise das MT.EXE-Tool aus dem Platform SDK verwenden, um das Manifest in Ihr Programm einzubetten. MT.EXE benötigt keine .RES-Dateien; Es kann die .manifest-Datei direkt zusammenführen.

3

Im Anschluss an Roger Lipscombes Kommentar habe ich eine Manifest-Datei in py2exe verwendet, ohne wirklich zu wissen, was ich mache. Also diese 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)], 
       }] 
    ) 

Möglicherweise müssen Sie allerdings etwas Fummelei tun ..

35

Im Anschluss an die Beispiele von Python2x\Lib\site-packages\py2exe\samples\user_access_control nur uac_info="requireAdministrator" in den dict Konsole oder Fenster:

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

Holy crap das hat funktioniert! Vielen Dank Lvaylo, das war genau das, was ich für mein Programm brauchte. So einfach auch. – rocketmonkeys

+0

Weiß jemand, ob es eine Entsprechung dazu mit py2app gibt, um in Mac OS X um Erlaubnis zu bitten? – Parker

+0

Dies muss die höchste Google-Suche für py2exe + UAC sein. Perfekte Antwort. – Crbreingan

Verwandte Themen