如何测试应用程序(.exe)是否使用运行时包构建

时间:2010-05-14 06:27:01

标签: delphi

如果我的.exe Delphi应用程序是使用运行时包构建的,还是单个.exe,我如何测试编码?

4 个答案:

答案 0 :(得分:8)

另一种可能性:

function UsesRuntimePackages: Boolean;
begin
  Result := FindClassHInstance(TObject) <> HInstance;
end;

答案 1 :(得分:2)

另一种可能性,如果您需要外部可执行文件(不运行它):

procedure InfoProc(const Name: string; NameType: TNameType; Flags: Byte; Param: Pointer);
begin
  case NameType of
    ntContainsUnit:
      if Name = 'System' then
        PBoolean(Param)^ := False;
  end;
end;

function UsesRuntimePackages(const ExeName: TFileName): Boolean;
var
  Module: HMODULE;
  Flags: Integer;
begin
  Result := True;

  Module := LoadLibraryEx(PChar(ExeName), 0, LOAD_LIBRARY_AS_DATAFILE);
  try
    Flags := 0;
    GetPackageInfo(Module, @Result, Flags, InfoProc);
  finally
    FreeLibrary(Module);
  end;
end;

答案 2 :(得分:1)

使用可以使用EnumModules()过程,如下所示:

function EnumModuleProc(HInstance: Integer; Data: Pointer): Boolean;
begin
  Result := True;
  if HInstance <> MainInstance then begin
    Inc(PInteger(Data)^);
    Result := False;
  end;
end;

function UsesRuntimePackages: boolean;
var
  PckgCount: integer;
begin
  PckgCount := 0;
  EnumModules(EnumModuleProc, @PckgCount);
  Result := PckgCount > 0;
end;

答案 3 :(得分:0)

您是否尝试过“Islibrary”?