【问题标题】:Is the key order important in the Delphi key 'Known Packages'?Delphi 密钥“Known Packages”中的密钥顺序是否重要?
【发布时间】:2012-10-18 21:03:29
【问题描述】:

我正在尝试保存一些 Delphi 设置信息以加快 Delphi 安装速度,但我对注册表键值顺序行为感到非常困惑。我导出了我的 Delphi XE2 注册表项:

HKEY_CURRENT_USER\Software\Embarcadero\BDS\9.0\Known Packages

到 *.reg 文件。从注册表中删除它并重新加载 reg 文件后,Delphi 抱怨缺少 bpl。当我查看密钥列表时,它现在都是按字母顺序排列的——它不是 reg 文件中的那个顺序。我假设在包依赖于另一个包的地方,必须首先列出依赖的包。我说的对吗?

然后我使用 Inno Setup 按此顺序创建三个键值 - B、A、D。运行后,注册表显示A,B,D键顺序。

作为一个组件安装程序,我很少有依赖包。我可以使用什么方法按照我选择的顺序保留密钥?一定是做了什么,因为我有一个按照 Delphi 要求的顺序的 reg 文件。导出后导入不对称似乎很疯狂。

【问题讨论】:

  • 我不这么认为.. 应用程序可以检索注册表项的最后写入时间,但我认为它与 reg 文件中的顺序不同。我发现任何排序都不重要。
  • 不应该很重要,但我也发现(在 Delphi 2007 中)顺序显然很重要。我的许多同事都遇到过同样的问题,重新创建注册表路径甚至移动 bpls 都解决了这个问题。不过,还没有找到真正的解决方案。
  • 我同意@SertacAkyuz 的观点,即这不是好的行为。请您提供一份质量控制报告吗?

标签: delphi registry delphi-xe2


【解决方案1】:

如您所见,这确实与注册表枚举顺序与字母顺序有关。

Delphi 以枚举顺序加载包,并不总是按字母顺序。
我还没有找到显示枚举顺序的注册表编辑工具,它们似乎总是显示字母顺序。

这在以下情况下尤其重要:

  1. BPL 文件不在 PATH 上,Delphi 无法自行解析依赖的 BPL 文件。
  2. 依赖顺序与字母顺序不同

当您无法将 BPL 文件放在 PATH 上时,您应该按照希望加载 BPL 文件的顺序添加注册表值(您可能需要多个具有相同键的部分来执行此操作)。

或者您应该使依赖顺序按字母顺序排列 (;

【讨论】:

  • 这似乎是合理的,但我认为任何取决于值顺序的做法都是缺陷,因为 “函数可能以任何顺序返回值”(RegEnumValue)。
  • @SertacAkyuz 我已经多次遇到这种行为,所以我很确定这是原因。
  • @Jeroen:感谢您的澄清。我以为是我。使用 regedit 导出然后重新导入的密钥更改其位置似乎非常危险。
猜你喜欢
  • 2014-04-17
  • 2011-01-05
  • 2012-01-10
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
  • 2018-11-04
  • 1970-01-01
  • 2019-08-29
相关资源
最近更新 更多