2010-05-14 5 views

답변

8

또 다른 가능성 :

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

"Islibrary"를 사용해 보셨습니까?

+0

시도했습니다. 작동하지 않습니다. 패키지 된 패키지와 패키지되지 않은 .exe 응용 프로그램 모두 False를 반환합니다. –

+1

EXE는 결코 라이브러리가 아닙니다. –

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; 
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; 
관련 문제