![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать версию проекта??? [D5, Win95/98, Win2k]
-=[SDA]=- © (2004-03-04 08:13:00)Здравствуйте! Вопрос в следующем: в /Project Options/есть вкладка /Version Info/где указаны различные данные, в том числе и FileVersion, т.е версия программы.... так вот... а как эту версию узнать из программы???, т.е. мне бы хотелось чтобы никто не смог работать с базой при помощи старого exe'шника...
Спасибо за внимание!Заранее благодарен за помощь....
mip (2004-03-04 15:43:00) [1]я делаю так:
function TFMain.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;
evvcom (2004-03-04 11:47:00) [2]А база на чем? (dbf, db, sql, ...)
Романов Р.В. (2004-03-04 11:07:00) [3]Переименуй 1 основное поле и в базе и в исходниках (Замени 1 букву). Старый экзэшник не сможет работать с этой таблицей.
-=[SDA]=- (2004-03-04 09:55:00) [4]>Измени формат базы
Неее... 42 таблицы!!! в каждой мин.5 полей...
База данных телеф. АТС + вся экономика.... лучше буду проверять версию файла, чем каждый раз менять названия полей...
Кстати, в проге примерно 50-80 модулей и 80-100 форм, отчетов и т.д... в половину из них я даже не заглядывал, т.к. прогу не я начинал писать.... так что это гемор...вот.... но все равно спасибо за совет
Романов Р.В. (2004-03-04 08:51:00) [5]
> мне бы хотелось чтобы никто не смог работать с базой при
> помощи старого exe'шника...
Измени формат базы
Юрий Зотов (2004-03-04 08:31:00) [6]> мне бы хотелось чтобы никто не смог работать с базой при
> помощи старого exe'шника...
Видимо, это все же не совсем та задача?
:о)
-=[SDA]=- (2004-03-04 08:25:00) [7]Спасибо, Юрий, буду пробовать.... :)
Юрий Зотов (2004-03-04 08:18:00) [8]Пример из справки:
procedure TForm1.Button1Click(Sender: TObject);
const
InfoNum = 10;
InfoStr: array[1..InfoNum] of string = ('CompanyName', 'FileDescription', 'FileVersion', 'InternalName', 'LegalCopyright', 'LegalTradeMarks', 'OriginalFileName', 'ProductName', 'ProductVersion', 'Comments');
var
S: string;
n, Len, i: DWORD;
Buf: PChar;
Value: PChar;
begin
S := Application.ExeName;
n := GetFileVersionInfoSize(PChar(S), n);
if n > 0 then
begin
Buf := AllocMem(n);
Memo1.Lines.Add('VersionInfoSize = ' + IntToStr(n));
GetFileVersionInfo(PChar(S), 0, n, Buf);
for i := 1 to InfoNum do
if VerQueryValue(Buf, PChar('StringFileInfo\040904E4\' + InfoStr[i]), Pointer(Value), Len) then
Memo1.Lines.Add(InfoStr[i] + ' = ' + Value);
FreeMem(Buf, n);
end
else
Memo1.Lines.Add('No version information found');
end;