実行時に。を介してパッケージをロードしていますLoadPackage()
。ロード後、パッケージのバージョンをチェックして、それが最新であることを確認したいとします。どうやってやるの?
質問する
2043 次
1 に答える
7
パッケージは単なる特殊なタイプの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.
完全なバージョン番号(リリース番号とビルド番号を含む)を取得する場合は、、およびWinApi関数を使用GetFileVersionInfoSize
できVerQueryValue
ますGetFileVersionInfo
。
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;
于 2012-10-22T19:47:36.387 に答える