为什么我的pyinstaller创建的可执行文件需要管理员权限?

时间:2012-04-02 00:03:26

标签: pyqt4 pygame pyinstaller

我编写了一个Python程序,我使用pyinstaller进行分发。到目前为止,我一直在使用onefile选项来创建独立的可执行文件。到目前为止,这一直很好,但随着应用程序的增长,启动时间变得有点长。我也希望用户正确安装应用程序,以使升级更简单。

我一直在尝试使用pyinstaller的onedir选项创建应用程序的单个目录版本。但是,生成的.exe文件需要运行管理员权限,onefile版本没有。程序本身不需要任何这样的权限,所以我认为这是pyinstaller正在做的事情。如何创建不需要管理员权限的应用程序?

其他信息:

  • Python 2.6,pyinstaller v1.4
  • 应用程序使用PyQt4和pygame模块。
  • 尝试为Windows 7创建可执行文件。
  • 使用-w pyinstaller选项创建无窗口可执行文件。

2 个答案:

答案 0 :(得分:5)

在少数情况下可以询问管理员权限:

一个。如果可执行文件名称包含相关关键字(例如setupinstallupdatepatch

B中。应用程序请求它显示在其中。

℃。 .exe文件名与清单文件中的名称不多。

如果为应用程序包创建.spec文件,则可以添加

exe = EXE(
    ...
    manifest=None,
    ...
    )

并且它不会要求输入密码,除非您将其重命名为设置或安装。

答案 1 :(得分:4)

我最近遇到过这个问题,因此我解决问题的经验是:

带有--onefile选项的PyInstaller在'executable'中创建一个清单文件。 Windows上的此清单文件告诉操作系统有关它捆绑的应用程序的一些信息。它指定的一件事是应用程序名称/清单文件。清单文件名的格式为appname.exe.manifest。如果您的程序被PyInstaller冻结,它存储在清单中的可执行文件名将是PyInstaller /dist文件夹下已完成的EXE 的名称。 如果重命名EXE,则打包的清单文件不再匹配!因此,创建一个与最终EXE文件名同名的清单文件,并使用--manifest选项运行PyInstaller ,或者不要重命名PyInstaller创建的EXE。

使用自定义--manifest打包PyInstaller项目时,重命名的程序不再请求管理员提升。