![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Версия программы
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
Вот этот набор смотри и в нете есть много примеров, можешь и компоненты посмотреть на торри например!