在C:\ Program Files(x86)\ MyApp \ myapp.cfg中编写配置文件,与管理员权限相对应

时间:2014-02-28 12:30:02

标签: windows winapi uac privileges

我为我的软件安装了一个安装程序(使用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中写信而不要求最终用户“以管理员身份运行”?

1 个答案:

答案 0 :(得分:2)

正如@TLama所说,永远不要尝试写入应用程序文件夹。这从来都不是推荐的做法,因为Vista微软已禁用它(首先允许你编写,但实际上将写入重定向到另一个目录,这个功能在以后的OS版本中似乎已经删除了 - 这也是好事,因为它正在制作支持地狱)。

要检索已知文件夹路径,请使用SHGetFolderPath功能。根据应用程序数据是在所有用户之间共享还是仅由运行应用程序的用户使用,您应分别使用CSIDL_COMMON_APPDATACSIDL_LOCAL_APPDATASHGetFolderPath。避免直接在这些文件夹中书写,但要创建<your company>\<your app>之类的子文件夹,并改用它们。

请注意,SHGetFolderPath已被弃用,并且应使用SHGetKnownFolderPath代替它,但前提是您不需要与Vista之前的Windows版本兼容。

为了完整起见,this thread还介绍了如何将SHGetFolderPath导入Python。

更新:已修正以避免使用环境变量而{@ 1}}代替@RemyLebeau @TLama的评论