CX_Freeze-使用管理员权限构建.msi

问题描述 投票:3回答:1

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

python cx-freeze
1个回答
0
投票

只是在寻找相同问题的解决方案时碰到了这个问题,所以我想我应该分享解决方法。简短版本-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'

OR

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

并重复上述内容(在其中创建您自己的文件夹,然后根据需要继续保存和读取文件)

© www.soinside.com 2019 - 2024. All rights reserved.