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

2024-01-14

我被要求更新过去 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 上运行。我的假设正确吗?如果是这样,链接将不胜感激。

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

  • The CSIDL_APPDATA文件夹是您可能最感兴趣的文件夹。漫游用户在登录的任何计算机上都可以使用此处存储的数据。这是存储简单配置数据的最佳位置。所有用户都具有对此(以及最后一个)文件夹的写入权限。请注意,上述文件夹均不适用于用户生成的数据!这应该属于“我的文档”层次结构。
  • EDIT:正如科迪·格雷在评论中建议的那样,还请考虑CSIDL_LOCAL_APPDATA用于始终位于当前计算机本地的应用程序数据,但按每个用户保留。此文件夹中的数据不可在漫游时使用,因此用户登录到其他计算机时可能不会错过这些数据。

我厚颜无耻地从一个人那里复制了上面的解释好文章 http://vb.mvps.org/articles/vsm20090119.pdf作者:Karl Peterson,为 VB6 程序员解释了这一点。卡尔还有一个即用型类 http://vb.mvps.org/samples/SysFolders这将帮助您找到目录,但恕我直言,他这次把事情搞得太复杂了。鲍勃·里默斯玛 (Bob Riemersma) 在一条线上有更好的方法 https://stackoverflow.com/questions/3054802/commonappdata-in-vb6/3073836#3073836, 使用外壳对象 https://web.archive.org/web/20120828005214/http://msdn.microsoft.com/en-us/library/bb774094(VS.85).aspx, 如下。EDIT鲍勃下面的评论解释了为什么最好使用后期绑定为此而不是早期绑定.

Const ssfCOMMONAPPDATA = &H23 
Const ssfLOCALAPPDATA = &H1c
Const ssfAPPDATA = &H1a
Dim strAppData As String 
 
strAppData = _ 
    CreateObject("Shell.Application").NameSpace(ssfAPPDATA).Self.Path 

在我看来这很好继续使用INI文件 https://web.archive.org/web/20080229181457/http://blogs.msdn.com/oldnewthing/archive/2007/11/26/6523907.aspx在这些目录中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该在哪里存储应用程序特定的设置? 的相关文章

随机推荐