我应该在哪里存储应用程序特定设置

时间:2010-11-25 03:08:38

标签: vb6 windows-7 windows-xp settings

我被要求更新过去6年一直在WinXP上运行的VB6应用程序。客户端想要使用Windows 7.到目前为止,应用程序将其设置存储在位于应用程序目录中的INI文件中。 XP和7之间的一个关键区别是你不能再写C:\Program Files\AppFolder了。

我想弄清楚文件系统应该在哪里存储设置?鉴于应用程序仍然需要在WinXP上运行,我有点困惑。

在WinXP上,我有以下内容:

C:\Documents and Settings\profilename\Application Data
C:\Documents and Settings\profilename\Local Settings\Application Data

在Windows 7上,我有以下内容:

C:\Users\profilename\AppData\Local
C:\Users\profilename\AppData\LocalLow
C:\Users\profilename\AppData\Roaming

这些文件夹中的每一个都有子文件夹,似乎存储各种产品的设置/文件

所以有2个问题:

  1. 鉴于所有这些文件夹,我在哪里存储我的设置?
  2. 我假设有一个漂亮的Windows API调用,它会给我这个文件夹的正确位置。我希望它适用于XP和7.我的假设是否正确?如果是这样,将非常感谢链接。

3 个答案:

答案 0 :(得分:12)

您可以在XP / Vista / Windows 7上使用许多特殊文件夹:

  • CSIDL_APPDATA文件夹是您可能最感兴趣的文件夹。此处存储的数据可供漫游用户登录的任何计算机使用。这是存储简单配置数据的最佳位置。所有用户都对此(以及最后一个)文件夹具有写入权限。请注意,上述文件夹均不适用于用户生成的数据!这将属于My Documents层次结构。
  • 编辑:正如Cody Gray在评论中所建议的那样,还要考虑CSIDL_LOCAL_APPDATA应用程序数据,这些应用程序数据始终是当前计算机的本地应用程序,但是基于每个用户进行预留。此文件夹中的数据在漫游的基础上不可用,因此它应该是用户在登录到其他计算机时可能不会错过的数据。

我无耻地从Karl Peterson的good article复制了上面的解释,为VB6程序员解释了这一点。 Karl还有一个ready-to-use class可以帮助你找到目录,但恕我直言,这次他过于复杂。 Bob Riemersma has a better way in one line,使用Shell object,如下所示。 编辑下面的Bob评论解释了为什么最好使用后期绑定而不是早期绑定

Const ssfCOMMONAPPDATA = &H23 
Const ssfLOCALAPPDATA = &H1c
Const ssfAPPDATA = &H1a
Dim strAppData As String 

strAppData = _ 
    CreateObject("Shell.Application").NameSpace(ssfAPPDATA).Self.Path 

在我看来,这些目录中的continue to use INI files很好。

答案 1 :(得分:7)

请参阅问题“Does Microsoft have a best practices document regarding the storage of app data?”以获取一些有用的信息。

答案 2 :(得分:1)

也许您只是将设置保存在Windows注册表中? 这很容易。使用SaveSeting和GetSetting比创建INI文件容易得多。 兼容性方面没有问题,从WinNT到Windows 8。