是否可以在 Vista 中以管理员身份以编程方式运行已编译的 Python(通过 py2exe 编译)?
更多说明:
我在 Vista 中编写了一个修改 windows 主机文件 (c:\Windows\system32\drivers\etc\hosts) 的程序,除非您右键单击并运行为即使用户具有管理员权限,管理员也是如此,不像在 XP 中,如果用户具有管理权限,它将运行,所以我需要一种以编程方式将其提升到正确权限的方法。
是否可以在 Vista 中以管理员身份以编程方式运行已编译的 Python(通过 py2exe 编译)?
更多说明:
我在 Vista 中编写了一个修改 windows 主机文件 (c:\Windows\system32\drivers\etc\hosts) 的程序,除非您右键单击并运行为即使用户具有管理员权限,管理员也是如此,不像在 XP 中,如果用户具有管理权限,它将运行,所以我需要一种以编程方式将其提升到正确权限的方法。
按照Python2x\Lib\site-packages\py2exe\samples\user_access_control
刚刚添加uac_info="requireAdministrator"
到控制台或 Windows 字典的示例:
windows = [{
'script': "admin.py",
'uac_info': "requireAdministrator",
},]
您的意思是您希望 Windows 在程序运行时提示提升吗?这是通过将 UAC 清单添加到 EXE 的资源来控制的。此博客条目介绍了如何创建清单以及如何将其编译为 .RES 文件。
我不知道 py2exe 用于嵌入自定义 .RES 文件的工具有哪些,因此您可能需要使用 Platform SDK 中的 MT.EXE 工具将清单嵌入您的程序中。MT.EXE 不需要 .RES 文件;它可以直接合并 .manifest 文件。
跟进 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)],
}]
)
你可能需要做一些摆弄虽然..
在这里可以找到 pyinstaller 的最佳解决方案:Request UAC elevation from within a Python script?
对 exe 清单文件的任何操作都不会起作用。使用 if else 语句在 python 代码中处理 uac