Главная страница
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.023 c
15-1199381330
Труп Васи Доброго
2008-01-03 20:28
2008.02.10
Займите 350 wmr


2-1200294735
Kolan
2008-01-14 10:12
2008.02.10
Как получить версию своей программы.


2-1200304108
Washington
2008-01-14 12:48
2008.02.10
Перехват вызова контекстного меню


15-1200055086
ни-кита
2008-01-11 15:38
2008.02.10
Вопрос про bat-файлы


2-1200302804
vint45
2008-01-14 12:26
2008.02.10
Запись набора байтов по адресу памяти в строковую переменную