delphi 安装程序包时无法加载程序包%s错误

643ylb08  于 2023-10-18  发布在  其他
关注(0)|答案(5)|浏览(162)

我在测试 Delphi 2007和我的groupproject是由2包。

PackageRun.bpl

它被标记为“仅运行时”,并包含一个名为“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.

PackageDes.bpl

它需要PackageRun.bpl,它被标记为“designtime only”,并包含一个名为“uMyTestDes.pas”的单元,我在其中编写了以下代码:

unit uMyTestDes;

interface

uses
  Classes,
  uMyTestRun;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('MyComponents', [TMyTest]);
end;

end.

这两个包的输出目录都在Library路径中(内部有bpl,dcp和dcu)。
尝试安装PackageDes.bpl(组件,安装包...,添加...),我得到以下错误:
无法加载包C:<...>\PackageDes. bpl。Impossible trovare il modulo specificato.
消息的最后一部分是在我的操作系统的语言,在英语中,它应该是类似于“找不到指定的模块”。(我的操作系统是Windows 10 Pro 64位)。
PackageDes.bpl与错误消息中显示的路径完全相同(C:<...>\PackageDes.bpl)。经过一些测试,我发现通过从uMyTestDes.pas单元中删除以下行,错误消失了:

RegisterComponents('MyComponents', [TMyTest]);

我的代码/项目/环境有问题吗?

h7appiyu

h7appiyu1#

http://SysInternals.com运行进程监视器,并设置过滤器仅拦截 Delphi IDE进程的文件操作(工具栏最右边的按钮)(检查TaskManager中的进程名称或快捷方式属性(对于 Delphi XE 2,它是bds. exe),然后添加类似于Include / Process Name / Ends With / bds.exe 的过滤器)。
然后清除PM中的日志,切换到 Delphi 并尝试加载包,然后一旦错误弹出,切换回PM并停止捕获事件。尝试做得快,你可以,例如不要浪费你的时间关闭错误框。
现在,您可以跟踪 Delphi 加载您的软件包时的文件I/O活动(以及其他一些背景活动噪声--您加载得越快,噪声就越少)。在该跟踪中查找所有错误,并查看 Delphi 试图在何处找到哪个包。
您还可以尝试使用Microsoft Dependency步行者或类似的工具来查看您的设计时BPL是否具有所有可解析的DLL依赖关系树。就我个人而言,我通常使用虚幻/总指挥官与FileInfo插件或ntCore CFF资源管理器。

mepcadol

mepcadol2#

解决此问题的简单方法是向您的运行时项目添加一个构建后操作:

copy "$(OUTPUTDIR)\$(OUTPUTFILENAME)" "$(BDSCOMMONDIR)\Bpl"

上面的命令将运行时文件复制到默认的IDE Bpl位置。

k2arahey

k2arahey3#

我也有类似的问题。在我的例子中,我在不同的 Delphi 版本BPL路径中有相同的库名称。我在上面的评论中找到了我的问题的解决方案,所以这只是一个基本的检查提醒:

  • BPL路径必须包含在您的OS路径变量中;
  • 在其他操作系统路径中搜索一个同名的BPL模块,在正确的路径之前(多个 Delphi 版本安装)。
5rgfhyps

5rgfhyps4#

对我来说,问题出在DProj文件中。此字段中不接受下划线:

<DllSuffix>_$(Auto)</DllSuffix>

在IDE中的“项目选项”中手动设置该字段不会有帮助。我必须将该字段设置为一个随机值(“x”),保存项目,然后再次打开项目选项,并将该字段放回$(Auto)。然后成功了。
更新:当您将该字段设置为“x”时,IDE似乎会修复

<Excluded_Packages>
      </Excluded_Packages>

所以,如果你有BPL的问题,搜索Excluded_Packages部分并从那里删除你自己的包。

更新:

看起来打开项目选项并转到“排除的软件包”选项卡就足够了。然后只需关闭项目选项,而不做任何更改。这样就行了
神秘是内河码头的风格!

yqhsw0fo

yqhsw0fo5#

尝试将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.

现在,软件包将正确安装。
问候。

相关问题