创建安装程序时如何确保从设计时包中正确“需要”定义 Delphi 运行时包
Posted
技术标签:
【中文标题】创建安装程序时如何确保从设计时包中正确“需要”定义 Delphi 运行时包【英文标题】:How to ensure correct 'requires' definition of a Delphi run-time package from within a design-time package when creating an installer 【发布时间】:2011-10-17 07:47:14 【问题描述】:我正在为目前没有的组件创建一个安装程序(例如优秀的SynEdit 编辑器库),这也让我能够比我更好地理解设计和运行时包。
我想确保最干净的部署,所以我知道许多单元将进入运行时包,并且及时我可能会使用“使用运行时包构建”进行部署,所以这一切都很好。但是,设计时包通常需要运行时包,这就是我遇到麻烦的地方。通常我会创建一个项目组,其中包含运行时包项目 (xxx-RXE),然后是设计时包项目 (xxx-DXE)。全部构建,一切都很好。我在我自己的库路径和install the design-time package into the IDE using the registry 中以 BPL、DCP 和 DCU 形式部署这两个包。然后将库路径添加到环境设置中。当我打开 Delphi(D7 和 XE 都是如此)时,我得到“无法加载包 XXXX-DXE,找不到库包 xxx-RXE.bpl。如果我通过修改设计时包以从“requires”中删除 xxx-RXE.dcp 并直接用单位替换它来作弊,一切都很好。
我试图避免在 Delphi 文件夹中插入任何内容,所以我的项目结构是这样的(仅显示 XE,D7 类似)。将包设置为输出单元,bpl 和 dcp 为“..\Library\Delphi15”,所有包都被赋予“..\Source”的搜索路径,设计时包的附加搜索路径为“..\Library” \Delphi15"(查找所需的运行时包)。
\Root
\Packages
xxx.groupproj
xxx-RXE.dpk
xxx-DXE.dpk
\Library
\Delphi15
(output of all dcus, dcp's, bpl's etc. Manually added *.res, *.inc and *.dfm's).
\Source
(The original project source files as used by the packages).
Delphi 不使用上述文件夹,在我的安装程序创建以下部署文件夹之前,我不会对 Delphi IDE 执行任何操作:
c:\Program Files\xxx\Library\Delphi15
(包含所有BPL、DCP、DCU等,也是放入环境库路径的路径)。
所以我不清楚的是,如果所有文件都在该文件夹中并带有路径,为什么 delphi 看不到它们?
感谢您的帮助。
【问题讨论】:
【参考方案1】:“找不到库包 xxx-RXE.bpl”可能会产生误导。我相信这实际上意味着 LoadPackage
失败,出于某种原因。这可能是由 Windows 路径中不存在的依赖包引起的。
【讨论】:
【参考方案2】:刚刚阅读“无法加载包 XXXX-DXE,未找到库包 xxx-RXE.bpl”引发了不好的回忆。通常,当包含 DCP(和/或 BPL?)的路径不包含在 Windows 环境变量 PATH 中时,我会收到此错误。
当一个已安装的包引用另一个包时,这个引用包的正常“Windows 库搜索行为”会启动(在 Delphi 启动时)。 此时没有任何 Delphi 路径配置处于活动状态。因此,您的安装程序还需要修改 PATH 环境变量(或将文件复制到某个已包含的位置)。
【讨论】:
【参考方案3】:我很确定 DCP 必须在 Delphi 的 DCP 文件夹中。在我的装有 Delphi 2010 和 Windows 7 的机器上,它位于 C:\Users\Public\Documents\Rad Studio\7.0\Dcp
。
搜索注册表,在HKCU\Software\Codegear\BDS\7.0\Library
的值Package DCP Output
下找到此路径。当然,你必须扩展字符串,因为它在里面是$(BDSCOMMONDIR)\Dcp
。
我还将运行时 BPL 也放在 Delphi 默认位置,(对我而言)也是 C:\Users\Public\Documents\Rad Studio\7.0\Dcp
。
【讨论】:
以上是关于创建安装程序时如何确保从设计时包中正确“需要”定义 Delphi 运行时包的主要内容,如果未能解决你的问题,请参考以下文章
设计时包无法构建 - 找不到文件:“Graphics.dcu”