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

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

Как получить версию приложения


Страницы:   1 2 3

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 байт...


Страницы:   1 2 3

Наверх

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