2008-10-12 50 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

相关问题