Форум: "Начинающим";
Текущий архив: 2008.02.10;
Скачать: [xml.tar.bz2];
ВнизКак получить версию своей программы. Найти похожие ветки
← →
Kolan © (2008-01-14 10:12) [0]То, что в Version info в настройках проекта указывается?
← →
oxffff © (2008-01-14 10:34) [1]См. PE HEADER
44h Word USER Major
46h Word USER Minor
← →
Kolan © (2008-01-14 10:36) [2]> См. PE HEADER
Я ессно нашел примеры вроде этого:
http://www.delphisources.ru/pages/faq/base/file_version_info.html
Нельзя ли это сделать проще?
← →
Ditrix © (2008-01-14 10:36) [3]function FileVersion(AFileName: string): string;
var
szName: array[0..255] of Char;
P: Pointer;
Value: Pointer;
Len: UINT;
GetTranslationString: string;
FFileName: PChar;
FValid: boolean;
FSize: DWORD;
FHandle: DWORD;
FBuffer: PChar;
begin
try
FFileName := StrPCopy(StrAlloc(Length(AFileName) + 1), AFileName);
FValid := False;
FSize := GetFileVersionInfoSize(FFileName, FHandle);
if FSize > 0 then
try
GetMem(FBuffer, FSize);
FValid := GetFileVersionInfo(FFileName, FHandle, FSize, FBuffer);
except
FValid := False;
raise;
end;
Result := "";
if FValid then
VerQueryValue(FBuffer, "\VarFileInfo\Translation", p, Len)
else
p := nil;
if P <> nil then
GetTranslationString := IntToHex(MakeLong(HiWord(Longint(P^)),
LoWord(Longint(P^))), 8);
if FValid then
begin
StrPCopy(szName, "\StringFileInfo\" + GetTranslationString +
"\FileVersion");
if VerQueryValue(FBuffer, szName, Value, Len) then
Result := StrPas(PChar(Value));
end;
finally
try
if FBuffer <> nil then
FreeMem(FBuffer, FSize);
except
end;
try
StrDispose(FFileName);
except
end;
end;
end;
// В качестве параметра задать имя программы, если своей программы:
FileVersion(Paramstr(0));
← →
oxffff © (2008-01-14 10:45) [4]
> // В качестве параметра задать имя программы, если своей
> программы:
>
> FileVersion(Paramstr(0));
Тогда проще зайти в опции проекта и посмотреть.
← →
oxffff © (2008-01-14 10:46) [5]
> oxffff © (14.01.08 10:45) [4]
Это шутка. :)
← →
Slym © (2008-01-14 10:52) [6]Ditrix © (14.01.08 10:36) [3]
многа букаф :)function GetFileVersion(const FileName:string):string;
var
VerSize,Zero:LongWord;
VerPtr,pData: Pointer;
DataSize: LongWord;
begin
result:="";
Zero:=0;
VerSize:=GetFileVersionInfoSize(PChar(FileName),Zero);
if VerSize=0 then Exit;
GetMem(VerPtr, verSize);
try
if GetFileVersionInfo(Pchar(FileName),0,VerSize,VerPtr) then
if VerQueryValue(verPtr,"\\StringFileInfo\\041904E3\\FileVersion",pData,DataSize) then
SetString(result,PChar(pData),DataSize);
finally
FreeMem(verPtr);
end;
end;
← →
Slym © (2008-01-14 10:54) [7]про TranslationString забыл :(
← →
Slym © (2008-01-14 11:16) [8]
function GetFileVersion(const FileName:string):string;
var
DataSize:LongWord;
pVerInfo,pData: Pointer;
Translation:string;
begin
result:="";
DataSize:=0;
DataSize:=GetFileVersionInfoSize(PChar(FileName),DataSize);
if DataSize=0 then Exit;
GetMem(pVerInfo, DataSize);
try
if GetFileVersionInfo(Pchar(FileName),0,DataSize,pVerInfo) then
begin
if VerQueryValue(pVerInfo, "\VarFileInfo\Translation", pData, DataSize) and (DataSize=SizeOf(LongWord)) then
Translation:=IntToHex(MakeLong(HiWord(PLongWord(pData)^), LoWord(PLongWord(pData)^)), 8)
else
exit;
if VerQueryValue(pVerInfo,PChar("\StringFileInfo\"+Translation+"\FileVersion"),pData,DataSize) then
SetString(result,PChar(pData),DataSize);
end;
finally
FreeMem(pVerInfo);
end;
end;
← →
Kolan © (2008-01-14 11:35) [9]> [8] Slym © (14.01.08 11:16)
Размер радует, шас попробую…
← →
Kolan © (2008-01-14 11:37) [10]Странно, мне кажется у какого-нибудь TApplication должны быть готовые св-ва для чтения версии…
← →
Kolan © (2008-01-15 10:44) [11]> [8] Slym © (14.01.08 11:16)
Работает — благодарю.
← →
pathfinder © (2008-01-15 17:12) [12]
> Kolan © (14.01.08 11:37) [10]
Есть функция в sysutils, может подойдет..
function GetFileVersion(const AFileName: string): Cardinal;
Description
GetFileVersion returns the most significant 32 bits of a file binary version number.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.02.10;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c