为什么.NET"应用程序设置"不存储在注册表中?

Tho*_*mas 26 .net registry application-settings

早在九十年代,微软推出了Windows注册表.应用程序可以将设置存储在不同的配置 有适用于应用程序范围和用户特定范围的配置单元,这些范围放置在适当的位置,以便漫游配置文件正常工作.

在.NET 2.0及更高版本中,我们有一个名为Application Settings的东西.应用程序可以使用它们来存储XML文件,app .exe.config和user .config中的设置.这些适用于应用程序范围和用户特定的范围,并且这些范围放置在适当的位置,以便漫游配置文件正常工作.

听起来有点熟?这些应用程序设置由XML文件支持的原因是什么,而不是简单地使用注册表?这不是注册表的目的吗?

我能想到的唯一原因是注册表是特定于Windows的,而.NET试图与平台无关.这是一个(或那个)原因,还是有其他我忽视的考虑因素?

Jim*_*nts 28

依赖注册表会阻止XCOPY部署.


Pet*_*teT 24

我不认为这是一个答案,我认为这是一个组合:

  • 在创建它时,注册表看起来是一个好主意,将所有程序的所有设置存储在一个地方,与之前通常使用的.ini文件相反.当时从慢速硬盘驱动器读取的小.ini文件的性能提高成本很高,单个注册表文件在某种程度上提高了性能.现在这种情况有所不同,因为硬盘驱动器的速度要快得多,并且越来越多的设置被转储到注册表中,这使得它成为系统的负担.如果你在Windows中安装和卸载大量程序开始变慢,你会看到这个,最终你可能最终重新格式化.
  • 即使在当前用户设置中,对注册表的错误写入也可能会破坏您的系统.
  • 注册表没有帮助xcopy部署没有特定代码的程序来处理缺少注册表项...这包括在很多情况下通过简单地删除文件夹来删除程序
  • 如果应用程序需要访问注册表,则可能需要更高的权限才能安装应用程序
  • .config文件可以轻松地允许默认应用程序和用户设置,可以在最终用户首次运行程序时进行修改
  • 允许.NET在没有特定于操作系统的代码的情况下可能在其他系 使用Silverlight和隔离存储可以看到这一点.
  • 通过为应用程序和用户使用隔离存储提高安全性
  • 为Microsoft提供了一种可行的方法,即在没有许多旧依赖项的情况下拥有托管代码的操作系统.将框架视为任何操作系统和托管代码之间的层.


Avi*_*tus 15

另一个原因是,为了编辑注册表,您必须拥有更高的权限.如果您只是编辑应用程序配置文件,则只需要拥有该文件的权限.


Bri*_*sen 12

  • 注册表很大,因此找到相关信息(即使搜索)也很麻烦.
  • 修改注册表时,可能会意外影响其他应用程序.
  • 如果注册表已损坏,则所有应用程序都可能受到影响(包括操作系统).
  • 您需要专用工具来搜索,修改甚至复制注册表.

我更喜欢配置文件.


kem*_*002 7

这是因为注册表是一个丑陋的噩梦,人们不喜欢它.它也不支持xcopy部署.通过使用xml文件进行配置,您可以在不需要安装程序的情况下将应用程序从一台机器移动到另一台机器.这是在90年代编写代码的最大抱​​怨之一.

使用注册表时,您必须授予某人在安装许多组织中禁止的应用程序时修改它的权限.要修改应用程序的设置,您还必须知道在注册表中查找哪些内容在许多情况下最难.使用配置文件,它与大多数其他应用程序隔离.通常,您需要的所有设置都在那里,以便于查看和修改.


Chr*_*heD 5

一个直接(但重要)的优势:

使用plain配置文件,用户可以在从备份重新安装/恢复时轻松恢复其设置.从注册表值执行此操作要困难得多.