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