Windows注册表最佳实践

Sea*_*ean 17 windows registry

以何种方式使用Windows注册表?我知道存储少量用户偏好是可以的,但是将所有用户数据存储在那里被认为是不好的做法吗?我认为这将取决于数据集,那么对于少量数据,例如,小于2KB,在100个左右的不同键/值对中如何.这是不好的做法吗?平面文件或SQLite数据库是更好的做法吗?

Rei*_*man 15

我要采取逆势观点.

注册表是放置所有类型的配置数据的好地方.一般来说,它比大多数配置文件更快,更可靠(注册表上的单个操作是事务处理,因此如果您的应用程序在写入期间崩溃,则注册表未被破坏 - 通常情况与ini文件不同).

Marcelo MD是完全正确的:在注册表(或任何其他非动态存储)中存储诸如操作百分比完成之类的事情是一个可怕的想法.另一方面,存储像最近使用的文件这样的数据就好了 - 注册表是为这种问题而构建的.

此帖中谈论MRU列表的其他一些评论者已经讨论了当MRU列表因应用程序崩溃而不同步时会发生什么的问题.我想知道为什么将MRU列表存储在每个用户存储的平面文件中更好?

我也不确定将数据存储在注册表中的"安全隐患"是什么.注册表与文件系统一样安全 - 注册表和文件系统使用相同的ACL机制来保护其数据.

如果您要将用户数据存储在文件中,则绝对应该将数据放在%APPDATA%\ CompanyName\ApplicationName中 - 如果两个不同的开发人员创建具有相同名称的应用程序(多少"媒体管理器")应用程序在那里?)你不会有碰撞.


Mit*_*ers 11

对我来说,简单的用户配置项和用户数据最好存储在简单的XML配置文件,SQLLite数据库或MS SQL Server Compact数据库中.确切的存储介质取决于实现的细节.

我只使用注册表来处理我不经常设置的内容,并且用户不需要能够更改/查看.例如,我之前已将加密的许可证信息存储在注册表中,以避免意外的用户删除数据.

  • 你指的是什么样的"安全和其他影响"? (2认同)

jal*_*alf 7

使用注册表来存储数据主要有一个问题:它不是非常用户友好.用户几乎没有机会备份他们的设置,将它们复制到另一台计算机,如果它们被破坏就对它们进行故障排除(或重置它们),或者通常只是看看他们的软件正在做什么.

我的经验法则是仅使用注册表与操作系统进行通信.文件类型关联,卸载程序条目,启动时运行的进程,显然必须在注册表中.

但是,在您的应用程序中使用的数据只属于App Data文件夹中的文件.(无论如何,Microsoft目前希望您使用的3个以上App Data文件夹中的一个)


its*_*att 5

由于每个用户在Windows中都有专门用于存储应用程序用户数据的目录空间,因此我使用它来存储用户级数据(例如,首选项).

在C#中,我会通过这样的方式得到它:

Environment.GetFolderPath( Environment.SpecialFolder.ApplicationData);
Run Code Online (Sandbox Code Playgroud)

通常,我会在那里存储SQLite文件或任何适合应用程序的文件.