我为我的软件制作了一个安装程序(使用Inno Setup),该安装程序最终安装在
C:\Program Files (x86)\MyApp\myapp.exe
像在Windows平台上一样,并且运行良好。
当我的软件尝试在此处写入其配置文件时出现问题:
C:\Program Files (x86)\MyApp\myapp.cfg
这里一个Permission denied
错误到来!
我发现的唯一解决方案是“以管理员身份运行软件”,但我不喜欢这种解决方案:我不想让最终用户每次使用该软件时都必须以“以管理员身份运行”。
有C:\Program Files (x86)\MyApp\myapp.cfg
没有权利要求最终用户“以管理员身份运行”而有权写入的干净解决方案?
正如@TLama所说,永远不要尝试写入应用程序文件夹。这从来都不是推荐的做法,并且自从Vista Microsoft禁用它以来(首先允许您进行写操作,但实际上将写操作重定向到另一个目录,此功能在以后的OS版本中似乎已被删除,这也是一件好事。支持地狱)。
要检索已知的文件夹路径,请使用SHGetFolderPath
函数。根据应用程序数据是在所有用户之间共享还是由运行该应用程序的用户使用,您应该分别SHGetFolderPath
使用CSIDL_COMMON_APPDATA
或进行调用CSIDL_LOCAL_APPDATA
。避免直接在这些文件夹中写入,而要创建类似的子文件夹<your company>\<your app>
并改用这些文件夹。
请注意,SHGetFolderPath
已经弃用了该选项,并且SHGetKnownFolderPath
可以代替它使用,但前提是您不需要与Vista之前的Windows版本兼容。
为了完整起见,该线程还介绍了如何导入SHGetFolderPath
Python。
更新:已纠正,避免使用环境变量,SHGetFolderPath
而是按@RemyLebeau @TLama的注释进行操作
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句