gpt4 book ai didi

delphi - 如何在运行时获取包名称/版本

转载 作者:行者123 更新时间:2023-12-02 02:10:27 31 4
gpt4 key购买 nike

我在运行时通过LoadPackage()加载包。假设加载后我想检查包的版本以确保它是最新的。我怎样才能做到这一点?

最佳答案

包只是一种特殊类型的dll,所以你可以使用GetFileVersion SysUtils 单元中定义的函数,该函数返回版本号的最高有效 32 位。因此不包括版本号和/或内部版本号。

{$APPTYPE CONSOLE}

{$R *.res}

uses
System.SysUtils;

Var
FileVersion : Cardinal;
begin
try
FileVersion:=GetFileVersion('C:\Bar\Foo.bpl');
Writeln(Format('%d.%d',[FileVersion shr 16, FileVersion and $FFFF]));
Readln;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.

如果您想检索完整的版本号(包括发行版和内部版本号),您可以使用 GetFileVersionInfoSize , VerQueryValueGetFileVersionInfo WinApi 函数。

function GetFileVersionStr(const AFileName: string): string;
var
FileName: string;
LinfoSize: DWORD;
lpdwHandle: DWORD;
lpData: Pointer;
lplpBuffer: PVSFixedFileInfo;
puLen: DWORD;
begin
Result := '';
FileName := AFileName;
UniqueString(FileName);
LinfoSize := GetFileVersionInfoSize(PChar(FileName), lpdwHandle);
if LinfoSize <> 0 then
begin
GetMem(lpData, LinfoSize);
try
if GetFileVersionInfo(PChar(FileName), lpdwHandle, LinfoSize, lpData) then
if VerQueryValue(lpData, '\', Pointer(lplpBuffer), puLen) then
Result := Format('%d.%d.%d.%d', [
HiWord(lplpBuffer.dwFileVersionMS),
LoWord(lplpBuffer.dwFileVersionMS),
HiWord(lplpBuffer.dwFileVersionLS),
LoWord(lplpBuffer.dwFileVersionLS)]);
finally
FreeMem(lpData);
end;
end;

end;

关于delphi - 如何在运行时获取包名称/版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13018631/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com