![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить версию приложения
neveGreen © (2008-12-15 15:30:00)Как получить версию приложения которое исполняется и версию exe файла и сравнить их потом? Применяется для обновления программы.
neveGreen (2008-12-18 20:56:00) [1]
> tesseract © (16.12.08 12:11) [38]
чёрт, обалденная книга...
neveGreen (2008-12-16 14:41:00) [2]да я просто сам даю советы, только по другому языку на другом сайте, и знаю, какие пользователи порой бывают, а бывают они порой очень уж не важные... бывало хотелось разбабарать пользователю чтото, когда в вдадцатом твоем посте ты стараешься изо всех сил заставить его сделать правильно, а он строит умника нефига при этом не понимая вообще... ну это уже другая история...
Palladin (2008-12-16 12:23:00) [3]
> Первый за две недели вежливый начинающий.
и не говори... +пытающийся что то понять...
такому даже пример можно написать, не поленится... зная, что за даром врядли пропадет...
tesseract (2008-12-16 12:11:00) [4]
> neveGreen (16.12.08 11:41) [36]
Первый за две недели вежливый начинающий. Уже отвыкли от таких :-)
Подтягивай на здоровье : http://www.bolero.ru/person-233830.html
clickmaker (2008-12-16 11:54:00) [5]если номер билда сквозной и увеличивается в новой версии, то достаточно сравнивать vs2[1]
neveGreen (2008-12-16 11:41:00) [6]Большое спасибо ) Да мне надо подтянуть работу со ссылками на память... И вообще, что я за программист, это ж основное?
Palladin (2008-12-16 10:29:00) [7]Ох ты'ж господи ты боже мой....
Function CompareInt64VersionInfoBytes(n1,n2:Int64):Integer;
Var
i1:Int64Rec Absolute n1;
i2:Int64Rec Absolute n2;
Begin
Result:=i1.Words[1]-i2.Words[1];
If Result=0 Then Result:=i1.Words[0]-i2.Words[0];
If Result=0 Then Result:=i1.Words[3]-i2.Words[3];
If Result=0 Then Result:=i1.Words[2]-i2.Words[2];
End;
Function GetVersion(Const S:String):Int64;
Var
buf:Pointer;
nSize:Integer;
vi:^vs_fixedfileinfo;
p:pointer absolute vi;
l:cardinal;
Begin
nSize:=GetFileVersionInfoSize(PChar(S),l);
If nSize=0 Then RaiseLastOSError;
GetMem(buf,nSize);
Try
If Not GetFileVersionInfo(PChar(S),l,nSize,Buf) Then RaiseLastOSError;
VerQueryValue(Buf,'\',p,l);
Int64Rec(Result).Hi:=vi.dwFileVersionMS;
Int64Rec(Result).Lo:=vi.dwFileVersionLS;
Finally
FreeMem(buf);
End;
End;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(CompareInt64VersionInfoBytes(
GetVersion('project2.exe'),
GetVersion('project3.exe')
)));
end;
neveGreen (2008-12-16 10:14:00) [8]да вот с указателями у меня напряг - понимаю вот из, а пользоваться не могу, опереторов не хватает... 8 байт это круто - а знаю адресс ячейки, а забрать от туда не знаю как.......(
Германн (2008-12-16 01:36:00) [9]Лишний пробел вставил нечаянно. :(
Германн (2008-12-16 01:33:00) [10]
> neveGreen (16.12.08 01:01) [31]
>
> Чувствую я уже достал )
>
Нет. (Пока ещё нет). Ты пока вполне адекватен. А если ты воспринял мой пост [30] как нечто касающееся именно и только тебя, то забудь его.
А ответ [30] я запостил просто по тому, что "ностальгия", пардон. :)
neveGreen (2008-12-16 01:01:00) [11]Чувствую я уже достал )
Германн (2008-12-16 00:57:00) [12]
> neveGreen (16.12.08 00:38) [29]
>
> А как лучше возвращать массив с четырьмя элементами или
> както через параметры?
>
Монопенисуально.
(с) Digitman
neveGreen (2008-12-16 00:38:00) [13]А как лучше возвращать массив с четырьмя элементами или както через параметры?
Anatoly Podgoretsky (2008-12-15 20:38:00) [14]> neveGreen (15.12.2008 18:39:26) [26]
Хочешь правильный результат = преобразуй составляющие в числа
Anatoly Podgoretsky (2008-12-15 20:36:00) [15]> tesseract (15.12.2008 18:17:25) [25]
За тр 1.10.12 будет меньше этих двух.
neveGreen (2008-12-15 18:39:00) [16]
> Anatoly Podgoretsky © (15.12.08 18:12) [24]
"Делать арифметические выводы из сравнения строк" я бы назвал неправильным в данном случае, даже уродливым, но у меня не получаеся подругому... (
tesseract (2008-12-15 18:17:00) [17]
> Я знаю, что данный путь дает неверные результаты в некоторых
> случаях.
Он в некоторых случаях даст верные результаты для строк. Если мне не изменяет память "1.2.12" будет больше "1.21.1". Т.К код для "." больше по номеру.
Anatoly Podgoretsky (2008-12-15 18:12:00) [18]> neveGreen (15.12.2008 17:21:21) [21]
Я знаю, что данный путь дает неверные результаты в некоторых случаях. Бессмысленно сравнивать строки и делать из этого арифметические выводы, очень бессмысленно.
neveGreen (2008-12-15 18:07:00) [19]Чтото типа такого?:
ver : Int64;
Begin
nSize := GetFileVersionInfoSize(PChar(S),l);
GetMem(Buf,nSize);
Try
GetFileVersionInfo(PChar(S),l,nSize,Buf);
VerQueryValue(Buf,'\',p,l);
ver := Buf;
Result := ver;
Palladin (2008-12-15 17:24:00) [20]версия хранится в двух значениях cardinal, а тип int64, как бы совершенно случайно, размером в 8 байт...