代码之家  ›  专栏  ›  技术社区  ›  Tom Gullen

系统注册有什么意义?

  •  11
  • Tom Gullen  · 技术社区  · 14 年前

    抱歉,我真的很无知,我只想知道,为什么程序需要注册表?这是为了什么?为什么软件不能只将变量写入自己的本地文件?它有什么我不知道的吗?

    9 回复  |  直到 12 年前
        1
  •  21
  •   Jay    13 年前

    imho,windows注册表是一项发明,几乎和pet rock一样实用和有用。

    1. 通过将应用程序配置数据与操作系统配置数据放在同一位置,它使得任何更新应用程序的尝试都有破坏操作系统的危险。就像做一个遥控器来控制你的电视和起搏器。当然,你可以争辩说把所有的控制都放在一个地方很方便,但这也会造成危险,任何改变频道的尝试都会杀死你。

    2. 旧的ini文件很容易被计算机和人读取和更新。对于一个真正懒惰的程序员来说,他们不知道如何操作一个简单的文本文件,有一些库函数可以简单而容易地完成它。用程序更新注册表有点困难,对任何人来说都是非常困难的,尤其是非程序员。

    3. 在每个程序都有一个目录并将其所有数据存储在该目录中的糟糕的过去,只需删除该目录就可以删除程序,只需复制该目录就可以自信地备份程序。对于注册表,每个程序都需要一个特殊的卸载程序,通常注册表中会有过时的或垃圾的条目不明确地在其中浮动。

    有没有人可以直面地说注册表易于管理,或者说它提高了系统的可靠性?

    我认为微软应该做的是创建一个中心文件,记录每个应用的安装目录以及它知道如何打开的文件扩展名。这应该是操作系统需要知道的关于应用程序的唯一信息。其他一切都应该存储在应用程序自己的目录中。

    更新:答复Mick

    我不同意参考文章中的大多数观点。比如,“你不能在一个ini文件中存储二进制数据”,“ini文件只有两个层次的结构”。如果系统ini文件只存储了操作系统需要知道的关于应用程序的信息,那么每个信息都只是几个文本字符串,不需要二进制数据或层次结构。应用程序ini应该只保存配置和首选项信息,因此,同样不需要二进制数据和层次结构。ini格式的优点是它是一个简单、易读的文本文件。这使得它易于解析、更新和管理。我最初的文章的重点是,通过添加注册表,以及各种复杂的功能,微软用一些难以管理的东西替换了一些易于管理的东西。

    关于安全性和并发性的观点有一定的正确性。但我们当然可以在现有框架内解决这些问题。

    当然,一个ini文件不能成为一个好的数据库。但那又怎样呢?这不是它的目的。这就像抱怨一双鞋不能帮助你游泳,不能让你飞,不能做早餐,因此我们应该用带有无线电控制装置和内置微波炉的喷气式脚蹼来代替所有的鞋。结果肯定会是一个过于复杂、笨拙的怪物。它将不再是舒适的步行,可能不会很好的游泳或做早餐。它不适合做一件事——走路——它几乎不适合做十几件事。顺便说一下,我们已经有了完美的工具可以完成的事情。哦,有点像登记处。

        2
  •  10
  •   msw    14 年前

    Windows注册表是 intended to stem the proliferation 局部的 .ini 程序正在写入的文件。

    它已经被 well argued 具体实施是 far worse 而不是它要解决的问题。在我有生之年不得不做一两次精确的手术之后,我恰好同意了。

        3
  •  7
  •   user195488    14 年前

    注册目的

    Windows注册表是一个层次结构 存储配置的数据库 Microsoft上的设置和选项 Windows操作系统。它包含 低级操作设置 系统组件以及 在平台上运行的应用程序: 内核、设备驱动程序、服务, SAM、用户界面和第三方 所有应用程序都使用 注册表。注册表还提供 访问用于分析的计数器的方法 系统性能。

    为什么要在ini文件上注册?

    .ini文件存储了每个程序的用户 单独文件中的设置。通过 相反,Windows注册表存储 所有应用程序设置在一个 中央存储库和 标准化形式。这提供了几个 与ini文件相比的优势[2]自 无法访问注册表 需要解析,可以从 或者写得比ini快 文件。此外,强类型数据可以 存储在注册表中,而不是 到存储在ini中的文本信息 文件夹。因为基于用户的注册表 设置从加载 用户特定路径,而不是来自 只读系统位置 注册表允许多个用户 共享同一台机器,以及 允许程序为 最低权限用户。备份和 恢复也简化为 注册表可以通过 远程网络连接 管理/支持,包括 脚本,使用 API,只要远程注册表 服务正在运行,防火墙规则 允许这样做。

    注册表具有改进的功能 系统完整性,就像注册表一样 作为数据库构建并提供 类似数据库的功能,如Atomic 更新。如果两个进程试图 更新相同的注册表值 同时,一个进程的更改将 先于他人和整体 数据的一致性将 保持。更改的位置 ini文件,这样的比赛条件可以 导致数据不一致 与尝试的更新不匹配。 Windows Vista和Windows 7提供 注册表的事务更新, 扩展原子性保证 跨越多个键和/或值 更改,使用传统的提交中止 语义学。(但请注意,ntfs 为文件提供这样的支持 系统也是如此,所以同样的保证 理论上可以用 传统配置文件。)

    Wikipedia - Windows Registry

        4
  •  6
  •   Will Hartung    14 年前

    程序首选项和设置的集中、普遍管理。

        5
  •  5
  •   paxdiablo    14 年前

    实际上,这是在Windows3.1中完成的,许多应用程序使用自己的ini文件。Windows95(从内存)引入了集中存储库的概念(尽管我认为在此之前只有一个有限用途的注册表),从那时起人们就一直在购买注册表清理程序。

    人们过去常常抱怨有太多的ini文件需要管理,速度是一个问题,因为它们是需要解析的文本文件。首先,我更喜欢应用程序拥有自己的东西 在他们自己的目录中 以便在要删除它们时更容易进行清理。

        6
  •  2
  •   Arafangion    14 年前

    从维基百科逐字引用:

    当Windows3.1首次引入时,Windows注册表的主要目的是存储基于COM的组件的配置信息。随着Windows95和WindowsNT的引入,它的使用被扩展到整理以前用于存储Windows程序配置设置的每个程序ini文件。

    http://en.wikipedia.org/wiki/Windows_Registry

        7
  •  2
  •   Billy ONeal IS4    14 年前

    为什么软件不能只将变量写入自己的本地文件?

    它可以,但这对软件开发人员来说可能不方便,因为:

    1. 开发人员必须编写自己的分析器。
    2. 开发人员必须编写自己的序列化逻辑。
    3. 想要手动编辑选项的用户必须学习给定配置文件的语法。

    注册表只不过是一个简单的(来自程序员预期的)数据库。

        8
  •  2
  •   Dagg Nabbit    14 年前

    这只是一个愚蠢的惯例。在UNIX或Mac文件系统中,该软件完全按照您的建议执行,将其设置写入普通文件,通常组织在用户主目录中的隐藏文件夹中。Windows有类似的东西,每个用户的主文件夹中都有一个名为“应用程序数据”的文件夹,您的程序可以将其用于存储,而不是使用Windows API和注册表。

        9
  •  -1
  •   Cody Gray iPhone Developer    13 年前

    因为Windows NT团队认为这是解决 problems with using INI files . 这是应用程序(以及Windows本身)在早期版本的Windows中存储设置的主要方式:只需“将变量写入自己的本地文件”。

    由于应用程序供应商在注册表方面的不当行为,以及随着时间的推移,整体式数据库缓慢损坏的固有可能性(现在回想起来很明显),我们现在已经对XML配置文件进行了几乎完整的介绍。尽管为了公平起见,大多数现代对注册表的批评都忘记了或只是掩盖了为了性能原因而必须做出的妥协,而牺牲了早期Windows机器的可扩展性。