20

在创建将针对多个 Windows 版本的应用程序时,确定应将应用程序特定数据存储在何处的最佳做法是什么。具体来说:

  • 应用程序特定数据(例如应用程序配置数据)
  • 用户特定数据/设置

例如,我知道在 Windows Vista 上可以使用环境变量,例如 %APPDATA%,但是 Windows 7、Windows XP、Windows 98 呢?

我的主要问题是,微软是否有这方面的最佳实践文档,概述了不同类型数据(应用程序与用户)的文件系统位置以及在读取/写入这些位置时需要牢记的安全隐患?

我还对这不仅与 .NET 应用程序(可以使用 ApplicationSettingsBase )以及非托管 C/C++ 应用程序有何关系感兴趣。

感谢 Pax 和 Remus 的两个出色答案。我也发现了这个项目(特定于 XP):

如何使用 Visual C++ 编写将用户和应用程序数据存储在正确位置的 Windows XP 应用程序

4

2 回答 2

9

这里有一个很好的描述各种 CSIDL 值和它们引用的文件夹(包括一个描述,希望能告诉你你需要知道什么)。

它还包含指向您应该用来检索这些特殊文件夹路径的函数的链接。

请注意,从 Vista 开始,该方法发生了一些变化。它现在使用KNOWNFOLDERID代替,CSIDL并且功能也发生了变化。见这里

您仍然可以使用旧功能(目前),因为我相信它们现在只是新功能的包装。在未来的某个时候,这种情况可能会改变。

于 2009-10-02T06:03:16.407 回答
9

这些通常在Windows 软件徽标计划(链接断开)中有所描述。该链接指向 Windows 7 徽标要求文档,但 XP、Windows 2003、Vista 和 Windows 2008 也存在类似文档。在“技术要求”部分,您会找到一些您正在寻找的信息:

必须在计算机上的用户之间共享的所有应用程序数据都应存储在ProgramData

所有特定用户专有且不与计算机的其他用户共享的应用程序数据必须存储在 Users\<username>\AppData

在“每台机器”安装中,用户数据必须在首次运行时写入,而不是在安装期间写入。这是因为在安装时没有正确的用户位置来存储数据。

编辑:

Windows 10 用户,请查看Windows 桌面应用程序的认证要求(第 10 节)

于 2009-10-02T06:37:09.630 回答