簡體   English   中英

安裝包時無法加載包 %s 錯誤

[英]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 路徑中有相同的庫名稱。 我在上面的評論中找到了我的問題的解決方案,所以這只是提醒檢查基本事項:

  • 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM