Windows 中的注册表有什么好处?

Ars*_*nko 7 windows windows-registry

Windows 在很大程度上依赖于注册表来存储小块信息,例如机器的 IP 地址。Unix 以及 Linux 和 OS-X 将所有内容都存储在普通文件中。

说到注册表,我发现它有几个问题:

  • 获取信息并不容易。例如,如果机器无法启动,而我尝试通过将磁盘安装在不同的机器上以从不同的操作系统访问它来解决问题(它是另一个 Windows 还是 Linux),我可以轻松访问所有文件(除了权限和加密),但是对于注册表,虽然理论上可以读取(并可能更改)它,但它需要额外的应用程序。

  • 命令行访问(在机器不再启动的情况下)是不可能的(除非也有应用程序,但我很确定安装和使用这些应用程序比简单地访问磁盘上的文件要困难得多)。

  • 信息可以位于文件或注册表中,因此必须兼顾两个位置。

  • 处理文件时使用的常用工具(例如findstrWindows 的小兄弟grep)在处理注册表项时不存在。

我敢肯定,如果 Microsoft 最初实施注册表,那是有充分理由的,并且为 Windows 提供了(甚至是轻微的)与当时其他操作系统相比的竞争优势。

我考虑了性能和空间限制,这在 Windows 诞生时尤为重要,但我看不出如何在注册表中存储某些内容来提高性能或减少使用的空间(将 DWORD 作为实际 DWORD 存储在注册表中,而不是将其字符串表示存储在文件将节省空间,但即使在 1985 年,这也有那么重要吗?

在安全方面,看起来也没有区别。我不确定 1985 年的情况是否如此,但今天的基于文件的权限看起来(如果不是更多的话)与为注册表项实现的权限一样强大。

组织也类似:基于树的结构,没有索引/搜索功能(而更高版本的 Windows 实现了文件索引)。

那么与将所有内容存储在文件中相比,注册表的好处是什么或最初是什么?

jcb*_*rmu 7

在微软开始使用注册表之前,他们有INI 文件(文本文件)。他们发现仅使用 INI 文件很难开发一个好的平台,因为:

  • 支持 Unicode 并不容易。
  • 这是一个文本文件,因此权限是在文件级别设置的,而不是在密钥级别设置的。任何有权访问该文件的人都可以访问其上的所有参数。

  • 如果两个线程试图同时更新一个 INI 文件,它们可能会意外删除另一个线程所做的更改。

  • 程序可以以独占模式打开 INI 文件并锁定其他所有人。
  • INI 文件只包含字符串。如果要存储二进制数据,则必须以某种方式将其编码为字符串。
  • 解析 INI 文件很慢。
  • INI 文件的集中管理很困难。由于它们可以位于系统中的任何位置,因此网络管理员无法编写脚本来检查应用程序状态并升级过时的应用程序。
  • 系统开始是多用户的,并且对每个用户的设置的控制开始变得势不可挡。这意味着有时为每个用户分隔 INI 文件。

这些是影响 Microsot 寻找新解决方案的要点,它们随注册表一起提供。注册表是一个数据库,所以它解决了以前的问题,但创建了新的:

  • 这是单点故障。
  • 它是二进制的。在损坏的情况下,徒手修复它是非常困难的。
  • 将其设置放在注册表中的应用程序可移植性较差。
  • 复杂的导航。

归功于重要来源:http : //blogs.msdn.com/b/oldnewthing/archive/2007/11/26/6523907.aspx

  • 您至少应该提供您获得信息的来源 - [为什么不推荐使用 INI 文件以支持注册表?](http://blogs.msdn.com/b/oldnewthing/archive/2007/11/26/ 6523907.aspx)。请阅读[如何参考别人写的材料](http://superuser.com/help/referencing) (3认同)
  • 它们是逐字复制的陈述,没有任何引用。出于这个原因,我必须投反对票。这个答案不值一提,在引用答案的参考资料之前,**抄袭绝对不能接受。**当材料被正确引用和引用时,我会撤回我的投票。 (2认同)