未以提升权限运行的应用程序不应访问Program Files 和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(或 Program Files (x86))文件夹的未以提升权限运行的应用程序实际上会在不知不觉中写入 VirtualStore 文件夹。微软认为这比程序故障(由访问限制引起)要好。事实上,由于这一点,大多数将设置保存在Program Files 文件夹中的旧程序将继续在 Windows Vista+ 上运行,并且每个用户都将获得自己的设置,作为奖励,即使原始软件制造商不认为这个。
您可以使用清单告诉 Windows 您的应用程序知道 VirtualStore,并且 Windows 不应在运行时更改任何路径。但是,如果您真的希望能够写入Program Files 文件夹,那么我认为您必须每次都以提升的权限运行应用程序,这通常是不可取的。
有关如何创建清单以使您的程序在每次执行时显示 UAC 提示以及如何禁用 VirtualStore 的详细信息已在之前的几个 StackOverflow 问题中得到解决。随意使用搜索框!