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

时间:2018-05-16 21:32:52

标签: python cx-freeze

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

1 个答案:

答案 0 :(得分: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'

重复上述操作(在其中创建您自己的文件夹,继续保存和读取文件)