如何获取加载的运行时包列表?

时间:2013-02-11 12:15:00

标签: delphi delphi-xe2 runtime-packages

我正在为我的应用程序创建“版本信息”对话框;类似于Delphi在“关于”对话框中的内容。我想只显示运行时包(.BPL文件)的版本信息,而不是所有加载的DLL。 RTL是否包含获取已加载包列表的函数,或者我必须使用EnumProcessModules函数并过滤结果?

提前致谢...

1 个答案:

答案 0 :(得分:7)

您可以使用System中的EnumModules功能。

这是一个非常简单的演示,说明如何使用EnumModules函数并获取所有已加载BPL's的名称。它是一个控制台应用程序,但代码可以很容易地在生产应用程序中重用。如果您想测试它,请确保您正在使用包:

program Project17;

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes, Windows;

function EnumModulesFunc(HInstance: Integer; Data: Pointer): Boolean;
var Buff:array[0..1023] of char;
begin
  if GetModuleFileName(HInstance, @Buff, SizeOf(Buff)) = ERROR_INSUFFICIENT_BUFFER then
    Buff[High(Buff)] := #0;
  TStringList(Data).Add(Buff);
end;

var L: TStringList;

begin
  try
    L := TStringList.Create;
    try
      System.EnumModules(EnumModulesFunc, L);
      WriteLn(L.Text);
    finally L.Free;
    end;
    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.