在Vista中以管理员身份运行已编译的python(py2exe)

时间:2008-10-12 04:46:17

标签: python windows-vista permissions py2exe

是否有可能以编程方式在Vista中以编辑方式运行已编译的Python(通过py2exe编译)?

更多澄清:
我编写了一个程序来修改Vista中的Windows主机文件(c:\ Windows \ system32 \ drivers \ etc \ hosts)程序将无法运行,除非您右键单击并以管理员身份运行,否则将失败,即使用户具有管理员权限,与XP中的用户具有管理权限不同,因此我需要一种方法以编程方式将其提升为正确的权限。

4 个答案:

答案 0 :(得分:36)

按照Python2x\Lib\site-packages\py2exe\samples\user_access_control中的示例添加uac_info="requireAdministrator"到控制台或windows dict:

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

答案 1 :(得分:5)

您是否希望Windows在程序运行时提示提升?这是通过向EXE的资源添加UAC清单来控制的。 This blog entry解释了如何创建清单以及如何将其编译为.RES文件。

我不知道py2exe用于嵌入自定义.RES文件的工具,因此您可能需要使用Platform SDK中的MT.EXE工具将清单嵌入到程序中。 MT.EXE不需要.RES文件;它可以直接合并.manifest文件。

答案 2 :(得分:3)

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

你可能需要做一些摆弄..

答案 3 :(得分:0)

此处找到pyinstaller的最佳解决方案:Request UAC elevation from within a Python script?

没有任何操作exe清单文件的操作。使用if else语句从python代码中处理uac