我已经为我的软件制作了一个安装程序(使用Inno Setup),最终安装在
C:\Program Files (x86)\MyApp\myapp.exe
在 Windows 平台上和往常一样,它运行得很好。
当我的软件尝试在此处写入其配置文件时出现问题:
C:\Program Files (x86)\MyApp\myapp.cfg
这里出现权限被拒绝
错误!
我找到的唯一解决方案是“以管理员身份运行软件”,但我不喜欢这个解决方案:我不想要求最终用户每次都必须“以管理员身份运行”他们将使用该软件。
是否有一个干净的解决方案可以在 C:\Program Files (x86)\MyApp\myapp.cfg
中进行写入,而无需要求最终用户“以管理员身份运行” ?
最佳答案
正如@TLama所说,永远不要尝试写入应用程序文件夹。这从来都不是推荐的做法,而且自 Vista 以来,微软已经禁用了它(首先允许您写入,但实际上将写入重定向到另一个目录,该功能在后来的操作系统版本中似乎已被删除 - 这也是一件好事,因为它正在使支持 hell )。
要检索已知文件夹路径,请使用 SHGetFolderPath
功能。根据应用程序数据是在所有用户之间共享还是仅由运行应用程序的用户使用,您应该调用 SHGetFolderPath
要么是 CSIDL_COMMON_APPDATA
或与 CSIDL_LOCAL_APPDATA
分别。避免直接在这些文件夹中写入,而是创建子文件夹,如 <your company>\<your app>
并使用它们来代替。
请注意SHGetFolderPath
已被弃用并且 SHGetKnownFolderPath
应该用来代替它,但前提是您不需要与 Vista 之前的 Windows 版本兼容。
为了完整起见,this thread还描述了如何导入 SHGetFolderPath
进入Python。
更新:已更正以避免使用环境变量和 SHGetFolderPath
相反,根据 @RemyLebeau @TLama 的评论
关于windows - 在C :\Program Files (x86)\MyApp\myapp. cfg中写入配置文件,与管理员权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22095286/