Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.10;
Скачать: CL | DM;

Вниз

Как получить версию своей программы.   Найти похожие ветки 

 
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)

Размер радует, шас попробую&#133


 
Kolan ©   (2008-01-14 11:37) [10]

Странно, мне кажется у какого-нибудь TApplication должны быть готовые св-ва для чтения версии&#133


 
Kolan ©   (2008-01-15 10:44) [11]

> [8] Slym ©   (14.01.08 11:16)

Работает &#151; благодарю.


 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.02 c
2-1200840259
savyhinst
2008-01-20 17:44
2008.02.10
TMemoryStream->TFileStream


3-1190966355
Игорь Шевченко
2007-09-28 11:59
2008.02.10
Как обеспечить невозможность вставки данных в обратном порядке


15-1199959150
Terc
2008-01-10 12:59
2008.02.10
Как установить Indy 10 in Delphi


15-1199969784
Вссм
2008-01-10 15:56
2008.02.10
virtual server 2005


15-1198113820
Anatoly Podgoretsky
2007-12-20 04:23
2008.02.10
О выборе платформы для ВЕБ и ФТП сервера