[英]Can't load package %s error while installing a package
我正在 Delphi 2007 上进行测试,我的 groupproject 由 2 个包组成。
包运行文件
它被标记为“仅运行时”并包含一个名为“uMyTestRun.pas”的单元,其中定义了一个空的 TFrame 后代:
unit uMyTestRun;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TMyTest = class(TFrame)
private
{ Private declarations }
public
{ Public declarations }
end;
implementation
{$R *.dfm}
end.
包描述文件
它需要 PackageRun.bpl,它被标记为“仅限设计时”并包含一个名为“uMyTestDes.pas”的单元,我在其中编写了以下代码:
unit uMyTestDes;
interface
uses
Classes,
uMyTestRun;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('MyComponents', [TMyTest]);
end;
end.
两个包的输出目录都在库路径中(里面有 bpl、dcp 和 dcu)。
尝试安装 PackageDes.bpl(组件、安装包...、添加...)时,出现以下错误:
无法加载包 C:\\<...>\\PackageDes.bpl。 不可能的 trovare il modulospecificato。
消息的最后一部分是我操作系统的语言,用英语应该是“找不到指定的模块”。 (我的操作系统是 Windows 10 Pro 64 位)。
PackageDes.bpl 与错误消息 (C:\\<...>\\PackageDes.bpl) 中显示的路径完全相同。 经过一些测试,我发现通过从 uMyTestDes.pas 单元中删除以下行,错误消失了:
RegisterComponents('MyComponents', [TMyTest]);
我的代码/项目/环境有问题吗?
从http://SysInternals.com运行 Process Monitor 并将过滤器设置为仅拦截 Delphi IDE 进程的文件操作(工具栏最右侧的按钮)(检查 TaskManager 中的进程名称或快捷方式属性(Delphi XE2 为 bds.exe) ,然后添加类似于 Include / Process Name / Ends With / bds.exe的过滤器)。
然后在 PM 中清除登录,切换到 Delphi 并尝试加载包,然后一旦出现错误就切换回 PM 并停止捕获事件。 尝试尽可能快地完成它,例如不要浪费时间关闭错误框。
现在,您将获得 Delphi 加载您的软件包的文件 I/O 活动的踪迹(以及其他一些背景活动噪音 - 执行得越快,噪音越小)。 在该跟踪中查找所有错误并查看 Delphi 尝试查找的位置和包。
您还可以尝试使用 Microsoft Dependency Walker 或类似工具来确定您的设计时 BPL 是否具有可解析的所有 DLL 依赖关系树。 我个人通常使用带有 FileInfo 插件或 ntCore CFF Explorer 的 Unreal/Total 命令。
解决此问题的简单方法是向运行时项目添加构建后操作:
copy "$(OUTPUTDIR)\$(OUTPUTFILENAME)" "$(BDSCOMMONDIR)\Bpl"
上面的命令将您的运行时文件复制到默认的 IDE Bpl 位置。
我有一个类似的问题。 在我的情况下,我在不同的 Delphi 版本 BPL 路径中有相同的库名称。 我在上面的评论中找到了我的问题的解决方案,所以这只是提醒检查基本事项:
尝试将register
过程更改为uMyTestRun
单元。
unit UMyTestRun;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;
type
TMyTest = class(TFrame)
private
{ Private declarations }
public
{ Public declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('MyComponents', [TMyTest]);
end;
end.
现在,该软件包将正确安装。
问候。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.