未以提升的权限运行的应用程序不应访问Program Files
and Program Files (x86)
目录。这对于安全来说是有好处的。此外,在多数情况下当开发人员告诉他的程序将数据保存在Program Files
文件夹,比如说程序设置,他完全忘记了程序设置应该是每个用户的事情!也就是说,本地计算机上的每个用户都应该能够使用该程序而不影响其他用户。换句话说,一个表现良好的应用程序应该将其设置保存在
C:\Users\<User Name>\AppData\Local\<Manufacturer>\<Product>\<Product Version>
目录。
例如,我的 AlgoSim 软件写入
C:\Users\<User Name>\AppData\Local\Rejbrand\AlgoSim\2.0
当然,
C:\Users\<User Name>\AppData\Local\
必须在运行时动态查找路径。使用
SHGetFolderPath(0, CSIDL_LOCAL_APPDATA, 0, SHGFP_TYPE_CURRENT, @path);
为了这。
自 Windows Vista 以来,未以提升的权限运行的应用程序会尝试写入Program Files
(or Program Files (x86)
) 文件夹实际上会在不知不觉中写入 VirtualStore 文件夹。微软认为这比程序失败(由访问限制引起)要好。事实上,由于这一点,大多数旧程序将其设置保存在Program Files
文件夹将继续与 Windows Vista+ 一起使用,并且每个用户都将获得自己的设置,作为奖励,尽管原始软件制造商没有想到这一点。
您可以使用清单告诉 Windows 您的应用程序知道 VirtualStore 并且 Windows 不应在运行时更改任何路径。但如果你真的希望能够写信给Program Files
文件夹,那么我认为您每次都必须以提升的权限运行应用程序,这通常是不可取的。
有关如何创建清单以使程序在每次执行时显示 UAC 提示以及如何禁用 VirtualStore 的详细信息,已在之前的几个 Stack Overflow 问题中得到解决。请随意使用搜索框!