我看到许多程序将其非用户相关的应用程序数据存储在公共应用程序文件夹中.好的,实际上他们所做的是在公共应用程序文件夹中创建一个文件夹来存储他们的数据.
要获取公共应用程序文件夹的路径,可以使用CSIDL_COMMON_APPDATA作为文件夹ID 调用SHGetFolderPath函数.如果不必支持Windows Vista之前的任何内容,则可以调用SHGetKnownFolderPath函数,并将FOLDERID_ProgramData作为已知文件夹ID传递.
啊! 我不知道普通应用程序文件夹是普通用户不可写的.幸运的是,似乎有一个推荐的解决方案.请参阅MSDN,数据和设置管理中的这篇文章,该文章指出以下"如果应用程序要求普通用户具有对CSIDL_COMMON_APPDATA的特定于应用程序的子目录的写访问权限,则应用程序必须在应用程序设置期间显式修改该子目录的安全性.修改后的安全性必须记录在供应商调查问卷中."
C:\ProgramData具有防止标准用户在那里写入的安全设置。这在 Windows 8 中并不新鲜,Windows 7 也是如此,Vista 上的等效文件夹也以这种方式保护。也许您的 Windows 7 环境禁用了 UAC,或者您可能已保护C:\ProgramData或C:\ProgramData\MyProgramName允许标准用户的写访问权限。
有几种方法可以使用此文件夹。某些应用程序仅在安装过程中在安装程序进程提升运行时写入此处。然后,以标准用户身份运行的应用程序本身可以读取,但从不尝试写入。
另一种方法是安装程序创建一个C:\ProgramData安全的子文件夹,以允许标准用户或开发人员认为合适的任何用户/组进行写入访问。