我应该使用注册表还是平面文件来保存程序的状态?

时间:2010-03-26 11:44:12

标签: language-agnostic

我们有很多产品在注册表中保存其“状态”。

保存计划状态的最佳做法是什么?将程序状态保存为注册表项或将程序状态保存为XML等平面文件有哪些优点/缺点?

谢谢!

8 个答案:

答案 0 :(得分:3)

明显的问题是将这些状态存储在普通文件中,使用户可以更轻松地手动备份/恢复状态。

答案 1 :(得分:2)

还要考虑注册表中有一些对系统中的每个用户都有特殊的密钥。

我认为注册表是存储可以轻松丢弃和恢复的用户特定信息的最佳选择(例如,用于登录的最后一个用户名)。其他数据应该在可以备份的设置文件中。

答案 2 :(得分:0)

多年来,程序员将他们的应用程序设置存储在配置文件中。然后时代发生了变化,多年来他们使用了注册表 - 他们中的许多人都使用它很糟糕,当Vista及其UAC出现在现场时它引起了问题。

如今,特别是在.Net世界中,Windows开发人员正在重新将资源存储在配置文件中。我个人认为这是最好的方法,如果你需要将你的应用程序移动到另一台机器,或重新安装你的操作系统,你必须确保你保存配置文件以保留你的设置。

您可能仍希望在注册表中存储某些内容,例如(加密)许可信息。对于其他一切,配置文件都很好。请注意UAC并提交虚拟化文件,这样您就不会在赛道上遇到麻烦。

答案 3 :(得分:0)

就个人而言,我会选择平面文件。

(我假设“注册表”是指Windows注册表?)

平面文件允许您(甚至用户)检查并最终手动修改值。 根据您的具体情况,这可能有助于调试,修复错误保存的数据等。

除非你想让数据“不透明”,因此“很难找到/操纵”,否则注册表几乎没有什么好处。也许它更快,但如果你有很多状态可以保存,最好使用嵌入式数据库而不是平面文件。

答案 4 :(得分:0)

我曾经遵循雷德蒙德的教义。我的程序使用.INI文件。然后我尽职尽责地切换到注册表 - 用户开始抱怨。所以,我逆转了趋势并切换回.INI文件。

有些人想编辑它们(好/坏?)。有些人想备份它们,或者转移到新机器上。如果重新安装Windows,有些人不想丢失它们。

作为用户,我有多个分区。 Windows /程序/数据/交换(以及其他一些)。没有程序进入c:\program files,它们都进入程序分区。没有我可以控制的数据进入c:\user data,它都进入数据分区(使用tweakui电源玩具,或者使用regedit更改默认值(但并非所有程序都表现良好并且读取了这些路径的注册表 - 一些只是硬编码))。

底线 - 当Windows将其内裤放入fankle时,我会进行全面重新调整(大约每三个月一次),然后格式化C:驱动器。

通过格式化Windows分区,我得到一个干净的安装。我的数据和程序是安全的,但我可能需要重新安装一些程序,这就是我尽可能使用便携式版本的原因。

Imo,注册表是Windows上有史以来最大的罪恶 - 单点故障。

我的建议?本地存储的配置文件。 INI如果允许用户编辑,序列化或二进制格式,如果没有。

或者,你可以选择......

答案 5 :(得分:0)

就个人而言,我选择一个平面文件,无论是INI文件还是XML文件对我没什么影响。然而,在我的工作中,由于与部署相关的问题,我们让客户更喜欢注册表。这取决于您的客户群是谁,以及保持您的产品工作的人更喜欢什么。

答案 6 :(得分:0)

我总是使用常规文件,因为它更容易开发=)

简单的io vs我不记得如何读/写注册表
简单的文件复制/粘贴与导出/导入密钥,用于备份/开发用于测试的多个版本的配置

请注意,所有这些优势也会转化为部署策略和配置的通用客户端使用

答案 7 :(得分:0)

取决于部署的重要程度。我的大多数应用程序都是XCopy-Deployable,即它们不需要安装程序,只需复制/解压缩即可。所以我使用.ini文件(使用my own INI File Parser,因为.net没有内置的)

但是,如果您的应用程序需要集中管理(例如,使用Windows组策略),或者如果您有“重型”安装程序,则注册表是首选。这是因为正常安装到C:\ Program Files的应用程序和普通用户没有对此目录的写访问权限。当然,还有替代品(应用程序是Silverlight应用程序时必须使用%APPDATA%或隔离存储),但您也可以“顺其自然”。

当然,如果您的应用程序应该在Mono上运行,那么您可以排除注册表,并且应该使用Flat Files。

相关问题