2008-10-12 51 views
7

是否有可能programaticly運行編譯的Python(通過py2exe comiled)爲在Vista管理員?運行已編譯的蟒蛇(py2exe)以管理員身份在Vista

一些更澄清:
我寫了修改Windows hosts文件的程序(C:\ WINDOWS \ SYSTEM32 \ DRIVERS \ ETC \主機)在Vista程序將無法運行,並會失敗,一個例外,除非你右鍵單擊並以管理員身份運行,即使用戶具有管理員權限,不像XP用戶是否有管理權限的地方運行,所以我需要一種方法來它programaticly提升到正確的權限。

回答

5

你的意思是你想運行您的程序時,Windows來提示提升?這通過向EXE資源添加UAC清單來控制。 This blog entry解釋瞭如何創建清單以及如何將其編譯到.RES文件中。

我不知道什麼設施py2exe有嵌入自定義.RES文件,所以你可能需要使用從Platform SDK中的工具MT.EXE嵌入體現在你的程序。 MT.EXE不需要.RES文件;它可以直接合並.manifest文件。

3

跟進羅傑Lipscombe的評論,我已經使用在py2exe清單文件沒有的我在做什麼,任何真正的知識。因此,這威力工作:

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

你可能需要做雖然有些擺弄..

35

繼從Python2x\Lib\site-packages\py2exe\samples\user_access_control的例子只是增加uac_info="requireAdministrator"到控制檯或Windows字典:

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

哇靠,這工作!非常感謝lvaylo,這正是我的計劃所需要的。太簡單了。 – rocketmonkeys 2009-10-22 21:29:17

相關問題