Форум: "Начинающим";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];
ВнизКак правильно определять версию файла ? Найти похожие ветки
← →
b/@. © (2009-06-12 12:48) [0]Нашел несколько примеров, только все они противоречивые:
вот первый
http://kladovka.net.ru/delphibase/?action=viewfunc&topic=fileattr&id=10389
еще один
http://kladovka.net.ru/delphibase/?action=viewfunc&topic=fileattr&id=10055
самый короткий
http://www.delphisources.ru/pages/faq/base/file_version.html
Так а как всётаки правильно ?
← →
palva © (2009-06-12 18:06) [1]У файла не бывает версии. Если он лежит в NTFS, то можно вытащить дату его создания. Может быть, это поможет.
← →
Игорь Шевченко © (2009-06-13 00:39) [2]
> Так а как всётаки правильно ?
http://www.delphisources.ru/pages/faq/base/file_version.html
по крайней мере за 10 лет этот метод не подводил
В остальные не смотрел, бо наворочено
← →
Германн © (2009-06-13 00:44) [3]
> Игорь Шевченко © (13.06.09 00:39) [2]
>
>
> > Так а как всётаки правильно ?
>
>
> http://www.delphisources.ru/pages/faq/base/file_version.
> html
>
И это способ определения версии любого файла?
:)
← →
Игорь Шевченко © (2009-06-13 01:48) [4]Германн © (13.06.09 00:44) [3]
> И это способ определения версии любого файла?
> :)
Безусловно любого, абы он соответствовал формату PE и имел ресурс типа RT_VERSION
← →
Германн © (2009-06-13 02:30) [5]
> Безусловно любого, абы он соответствовал формату PE и имел
> ресурс типа RT_VERSION
>
Ну да, ну да.
← →
Нат © (2009-06-13 03:36) [6]Для начала, зачем автору номер версии?
Красиво нарисовать на заставке?
Тогда это не поможет.
Прежде чем читать, номер версии придется записать.
← →
b/@. © (2009-06-15 10:49) [7]Да-да-да :)
Автору номер версии нужен именно для того, чтобы красиво нарисовать на заставке.
А еще из-за того, что эта форма общая для нескольких программ и соответсвенно имя программы и версия у них разное.
> Игорь Шевченко © (13.06.09 00:39) [2]
ВSysUtils
неожиданно нашлась фунцияGetFileVersion
:)
← →
oldman © (2009-06-15 11:00) [8]
> b/@. © (15.06.09 10:49) [7]
> В SysUtils неожиданно нашлась фунция GetFileVersion :)
Поищи ещеSetFileVersion
:)
← →
Игорь Шевченко © (2009-06-15 12:43) [9]b/@. © (15.06.09 10:49) [7]
> В SysUtils неожиданно нашлась фунция GetFileVersion :)
Мне, например, такая реализация не годится -
"It generally does not include the release or build numbers."
если посмотреть ее код и код в
> http://www.delphisources.ru/pages/faq/base/file_version.html
то видно, что в первом случае берется только FixedInfo.dwFileVersionMS, а во втором еще и FixedInfo.dwFileVersionLS
← →
b/@. © (2009-06-15 15:14) [10]
> Игорь Шевченко © (15.06.09 12:43) [9]
> то видно, что в первом случае берется только FixedInfo.dwFileVersionMS, а во втором еще и FixedInfo.dwFileVersionLS
Думаю это уже мелочи :)
Меня больше интересовали аргументыVerQueryValue(VerBuf, "\", Pointer(FI), VerSize)
Есть еще один вопрос, но спрошу уже в новой теме.
← →
b/@. © (2009-06-16 12:33) [11]Вот какая странная получилась собственная версия :)
function GetVersion(const AFileName: string; out AVersion: string): boolean;
resourcestring
SEmpty = "filename is empty";
SExist = "file not exist";
SSize = "version info not included ";
SAlloc = "memory allocation error";
SInfo = "getting version info fail";
SValue = "query value failed";
SLen0 = "query value length = 0";
SSigna = "wrong version info signature";
const
SVersion = "%d.%d.%d.%d";
type
LPVOID = pointer;
var
Filename: string;
lptstrFilename: LPTSTR;
dwHandle: DWORD;
dwLen: DWORD;
lpData: LPVOID;
pFileInfo: ^VS_FIXEDFILEINFO;
puLen: UINT;
major: WORD;
minor: WORD;
relea: WORD;
build: WORD;
begin
result := false;
if Length(AFileName) = 0
then begin
AVersion := SEmpty;
exit;
end;
if not FileExists(AFileName)
then begin
AVersion := SExist;
exit;
end;
Filename := AFileName;
UniqueString(Filename);
lptstrFilename := LPTSTR(Filename);
dwLen := GetFileVersionInfoSize(lptstrFilename, dwHandle);
if dwLen = 0
then begin
AVersion := SSize;
exit;
end;
try
lpData := AllocMem(dwLen);
except
AVersion := SAlloc;
exit;
end;
try
if not GetFileVersionInfo(lptstrFilename, dwHandle, dwLen, lpData)
then begin
AVersion := SInfo;
exit;
end;
if not VerQueryValue(lpData, "\", LPVOID(pFileInfo), puLen)
then begin
AVersion := SValue;
exit;
end;
if puLen <= 0
then begin
AVersion := SLen0;
exit;
end;
if pFileInfo.dwSignature = VS_FFI_SIGNATURE
then begin
major := pFileInfo.dwFileVersionMS shr 16;
minor := pFileInfo.dwFileVersionMS and $FFFF;
relea := pFileInfo.dwFileVersionLS shr 16;
build := pFileInfo.dwFileVersionLS and $FFFF;
AVersion := Format(SVersion, [major, minor, relea, build]);
result := true;
end else begin
AVersion := SSigna;
exit;
end;
finally
FreeMem(lpData);
end;
end;
← →
Игорь Шевченко © (2009-06-16 12:40) [12]b/@. © (16.06.09 12:33) [11]
в
> http://www.delphisources.ru/pages/faq/base/file_version.
> html
короче
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.021 c