CX_Freeze - 构建具有管理员权限的 .msi

Posted

技术标签:

【中文标题】CX_Freeze - 构建具有管理员权限的 .msi【英文标题】:CX_Freeze - Building a .msi with Admin permissions 【发布时间】:2018-05-16 21:32:52 【问题描述】:

我正在尝试从我的 python/tkinter 代码创建一个可以由其他用户安装的可执行文件。我已经能够使用 cx_Freeze 成功地做到这一点,但是,.exe 无法写入工作目录或指定目录中的文件。 在研究了这个问题后,我发现这可能是因为 .exe 没有适当的读/写权限。 果然,当我尝试以管理员权限运行 .exe 时,我能够执行相关功能。由于这行得通,我想知道是否有办法在 setup.py 文件中指定用户权限的同时构建 cx_Freeze .msi。我无法找到任何有关此的文档,因此希望您能对此提供帮助。非常感谢任何帮助!

【问题讨论】:

【参考方案1】:

在寻找同一问题的解决方案时遇到了这个问题,所以我想我会分享我是如何解决它的。简短版本 - C:\Program Files 并非旨在成为对任何程序具有权限的文件夹。

Windows 中的程序应使用 AppData 文件夹来写入其本地数据,理论上,C:\Program Files 从安装那一刻起就不会发生任何变化。 Windows 有环境变量来告诉你应用程序数据应该保存在哪里。对我来说运行这个:

app_data_folder = os.environ['ALLUSERSPROFILE']

为我提供所有用户的共享数据文件夹(在我的情况下为 C:\ProgramData)。然后我的程序可以在其中创建一个文件夹,并以完全权限对那里的文件执行任何我想做的事情。

如果所有用户的共享数据文件夹不是您想要的,您应该使用其中之一来获取运行程序的特定用户的 AppData 文件夹:

os.environ['APPDATA']  # in my case: 'C:\\Users\\myuser\\AppData\\Roaming'

os.environ['LOCALAPPDATA'] # in my case: 'C:\\Users\\myuser\\AppData\\Local'

然后重复上面所说的(在那里创建你自己的文件夹,继续保存和读取文件)

【讨论】:

以上是关于CX_Freeze - 构建具有管理员权限的 .msi的主要内容,如果未能解决你的问题,请参考以下文章

打开 cx_freeze 构建的 exe 文件时出错

cx_freeze 无法构建 numpy 可执行文件

cx_Freeze 构建错误?

cx_freeze 将项目构建为 .exe 文件,出现 numpy 导入错误

使用 cx_Freeze 从 .py 构建一个 .exe 文件

使用 cx_Freeze 构建 msi:ValueError:FCI 错误 1