Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Версия программы


Strech ©   (2005-01-27 04:35:00) 

Как определить версию собственной программы? Можно ли выдернуть эту информацию непосредственно из ресурсов? GetFileVersion использует имя файла, а что делать если этого файла нет, а он создается динамически и только в ОЗУ?


-SeM-   (2005-01-28 11:37:00) [1]

2Strech
Стукни в аську 191381203, please ...


Игорь Шевченко   (2005-01-28 10:55:00) [2]

Strech   (28.01.05 10:29) [10]

Так загружай ресурс типа RT_VERSION и вызывай VerQueryValue


Strech   (2005-01-28 10:29:00) [3]

Нету у меня DLL. Все что у меня есть - это хэндл HMODULE. Соответственно я могу пользоваться FindResourceEx(), LoadResource().


Poirot   (2005-01-28 09:30:00) [4]

Как я помню лодер для ДЛЛ! Тебе DLL я так понимаю надо?! Дык если ты её грузишь - значит знаешь путь, тогда в чём проблема?!
Если из ресурсов - выгрузи ресурс - TREsourceStream например и парсь его как хочется...


Strech   (2005-01-28 03:11:00) [5]

Есть зашифрованный файл (в нем, кстати и та самая версия есть) со своим загрузчиком. см: http://www.rsdn.ru/article/baseserv/peloader.xml
Поскольку этот файл зашифрован, то версию указанными средствами я определить не могу. При запуске файл расшифровывается в ОЗУ. и Application.ExeName и GetModuleFileName(0) дают фигню полную. Неужели версию непосредственно из ресурсов прочитать нельзя?


Просто Джо   (2005-01-27 23:56:00) [6]


>  Strech   (27.01.05 04:35)


Адназначна вырусс.

"Создает себя в ОЗУ" а потом озабоченно интересуется своей версией. Из рэсурсов.


Woolen   (2005-01-27 14:42:00) [7]


> GetFileVersion
> использует имя файла, а что делать если этого файла нет,
> а он создается динамически и только в ОЗУ?

И что ты его создаешь в ОЗУ с версией, чтобы ее оттуда потом читать? :-)


Kerk   (2005-01-27 11:26:00) [8]

Игорь Шевченко ©   (27.01.05 11:03) [2]

теги закрывать над о:)


Игорь Шевченко   (2005-01-27 11:15:00) [9]


> Я же говорю, что файла нет. Где мне FileName взять


Application.ExeName,
GetModuleFileName(0)
выбор безграничен.


Strech   (2005-01-27 11:14:00) [10]

Я же говорю, что файла нет. Где мне FileName взять?


Игорь Шевченко   (2005-01-27 11:03:00) [11]


 procedure GetFileVersion(const FileName: string; var Major1, Major2, Minor1,
   Minor2: Integer);
 { Helper function to get the actual file version information }
 var
   Info: Pointer;
   InfoSize: DWORD;
   FileInfo: PVSFixedFileInfo;
   FileInfoSize: DWORD;
   Tmp: DWORD;
 begin
   // Get the size of the FileVersionInformatioin
   InfoSize := GetFileVersionInfoSize(PChar(FileName), Tmp);
   // If InfoSize = 0, then the file may not exist, or
   // it may not have file version information in it.
   if InfoSize = 0 then
     raise Exception.CreateFmt('Can''t get file version information for %s',
       [FileName]);
   // Allocate memory for the file version information
   GetMem(Info, InfoSize);
   try
     // Get the information
     GetFileVersionInfo(PChar(FileName), 0, InfoSize, Info);
     // Query the information for the version
     VerQueryValue(Info, '\', Pointer(FileInfo), FileInfoSize);
     // Now fill in the version information
     Major1 := FileInfo.dwFileVersionMS shr 16;
     Major2 := FileInfo.dwFileVersionMS and $FFFF;
     Minor1 := FileInfo.dwFileVersionLS shr 16;
     Minor2 := FileInfo.dwFileVersionLS and $FFFF;
   finally
     FreeMem(Info, FileInfoSize);
   end;
 end;


Poirot   (2005-01-27 10:34:00) [12]

GetFileVersionInfoSize
GetFileVersionInfo
VerQueryValue
Вот этот набор смотри и в нете есть много примеров, можешь и компоненты посмотреть на торри например!


Наверх

Титульная страница Поиск, карта сайта Написать письмо