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



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

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

窗口中的程序应使用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'

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

最新更新