4

好的,首先坦白:也许只是我,但有时 Windows 机器上的“程序设置最佳实践”感觉它比微软的数据访问策略改变得更多。我仍在运行 XP,在此过程中,我只是对 MS 希望我在哪里存储我的所有应用程序的数据等有点“呆滞”。我控制了我编写的所有机器,所以这真的没关系。

现在我正在为“in the wild”编写应用程序,以支持 Win98SE。我必须再次注意这一切。:-\

由于主要与轻松迁移到新计算机有关的原因,我不太喜欢使用注册表进行应用程序设置——我更喜欢使用 INI 文件,并且有一些用于任务的旧 INI 组件(Raize,通常)。我愿意接受对其他第三方组件的建议,如果他们能让这更容易/更少麻烦的话。

基本上,我需要存储应用程序设置(比如记住选项设置等)。

我已阅读: 用于存储用户可配置应用程序设置的注册表与 INI 文件
在哪里存储程序设置而不是 HKEY_LOCAL_MACHINE?
我的 win32 程序应该将其文件保存在哪里?
在 Windows 上为我的程序存储配置文件和日志文件的最佳位置?

...所以至少在这个问题上我并不孤单...; )
(对于有点重复的问题表示歉意,尽管角度略有不同)。

听起来我可以只使用 %APPDATA%/MyProgram,并将所有数据存储在那里,但是从 Win98SE 开始,这是否适用于所有 Windows 风格?如果不是,最好的方法是什么,这种方法是什么时候出现的?

老实说,我真正想要的是解决这个问题的最简单方法——我只想要一种(如果可能的话)简单、简单、可靠的方法来在任何情况下获取“我的程序的数据文件夹” . 以上会实现吗?

4

5 回答 5

5

转到使 Delphi 程序为 Vista-Ready 准备并向下滚动到底部:“在哪里保存您的应用程序数据?”

函数GetRoamingUserAppDataPath:字符串;//只要人们至少有 IE 4 就可以工作。(和 Win95 或更高版本)

于 2009-03-28T02:46:37.797 回答
3

%APPDATA% 在 Win95 上似乎不存在。我会使用在 Win98 或 Win95 w/IE4 上可用的SHGetSpecialFolderPath 。

于 2009-03-28T01:53:22.183 回答
2

到目前为止你得到的答案很好,但是我认为你在你的问题中混合了不属于一起的东西,所以不可能完全回答你的问题。

您的问题标题说明

INI 类型设置和/或 DB 文件

这可能是两件完全不同的事情。您必须区分每个用户的文件、所有用户通用但只读的文件以及每个用户应该能够使用的通用文件。

第一类很简单,使用CSIDL_APPDATACSIDL_PERSONAL文件夹下的合适目录。

第二类也很简单,只需要通过安装程序将文件安装在正确的位置,安装程序必须以正确的权限运行,因为标准(受限)用户将无法写入正确的位置。

然而,最后一个类别是困难的,因为在所有 Windows 安装中根本没有一个目录可以被认为对所有用户都是可写的。特别是在具有锁定用户帐户的业务设置中,用户可能根本没有本地磁盘的写入权限,只能写入网络服务器上某处的用户目录。因此,没有一种简单的方法可以为您的程序获取该数据位置并确保它能够正常工作 - 您可能需要重新访问所有程序和所有用例。

对于奖励积分,您还应该始终考虑文件是否应该进入漫游配置文件并在域中的所有机器上可用,或者它们是否是特定于机器的。

对于需要在计算机上的用户之间共享数据的应用程序,我要给出的一个提示是不要使用桌面样式的数据库文件,例如 Paradox 或 Access 文件。只有使用真实的(本地)数据库服务器,您才能在锁定的帐户/机器上拥有多用户数据。

于 2009-03-28T12:35:43.933 回答
0

我无法评论它是否适用于所有版本,但我当然同意 .ini 文件是正确的答案。当 XP 说要使用注册表时,我尝试了它——用于一个程序。内部部署表明需要将设置从一台机器复制到另一台机器——下一次更新是回到 .ini 文件。

我认为整个注册表位是他们的反盗版措施,他们希望将隐藏作为最佳实践。

于 2009-03-28T01:47:51.807 回答
0

我倾向于使用 %APPDATA% 中的 xml 文件来保存我的设置。只是因为对于 C#,xml 比 ini 更容易。无论如何,%APPDATA% 似乎是一个安全的赌注。

我无法建议 98SE 是否支持这一点。

于 2009-03-28T12:17:33.633 回答