Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Вниз

Взять правильную версию переименованого EXE-файла?   Найти похожие ветки 

 
Семен Сорокин ©   (2005-10-21 17:04) [0]

Приветствую!
Ситуация следующая: есть запущенный exe (для примера test.exe) (система WinXP), версия файла 2.3.1.958, мне надо сделать обновление файла, я переименовываю test.exe в test_.exe - он оставется работать.
скидываю новую версию (2.3.1.959) test.exe.

В программе есть проверка версии, вот код, выполняющий проверку версии по таймеру:

procedure TfmMain.tmrCheckUpdateTimer(Sender: TObject);

function GetVersion(const Name: String): string;
type
  PVerLang = ^TVerLang;
  TVerLang = packed record
    Charset : Word;
    LangID  : Word;
  end;
var
    VerInfoSize : DWord;
    dummy       : DWord;
    VerInfo : Pointer;
    VSFixed : PVSFixedFileInfo;
    VSFixedSize : DWORD;
    VTranslation : PVerLang;
    VTRSize : DWORD;
    LangID : String;
    VerKey : String;
    VerDesc : PChar;
    VerDescSize : DWORD;
    Status : LongBool;
begin
 Result := EmptyStr;
 VerInfoSize := GetFileVersionInfoSize(PChar(Name), dummy);
 if (VerInfoSize = 0) then
   Exit;
 GetMem(VerInfo, VerInfoSize);
 try
   Status := GetFileVersionInfo(PChar(Name), 0, VerInfoSize, VerInfo);
   if NOT Status then
     Exit;
   VerQueryValue( VerInfo, "\", Pointer(VSFixed), VSFixedSize);
   VerQueryValue( VerInfo, "\VarFileInfo\Translation", Pointer(VTranslation), VTRSize);
   if (VTRSize = 4) then begin
     LangID := Format("%.4x%.4x", [VTranslation^.CharSet, VTranslation^.LangID]);
     VerKey := "\StringFileInfo\"+LangID+"\FileVersion";//Description";
     Status := VerQueryValue (VerInfo,PChar(VerKey), Pointer(VerDesc), VerDescSize);
     if (Status) AND (VerDescSize <> 0) then
       Result := VerDesc
   end;
 finally
   FreeMem(VerInfo, VerInfoSize);
 end;
end;
var
 _ver: string;
 _res: integer;
begin
if not FCheckVersion then
 Exit;
_ver := GetVersion(GlobalData.FileName);
if (_ver <> EmptyStr) and (_ver <> GlobalData.Version) then begin
 _res := MessageDlg("Обнаружена новая версия программы: " + _ver + "!"#13#10"Перезапустить программу?", mtConfirmation, [mbYes, mbNo], 0);
 if _res = mrYes then begin
  Close;
  ShellExecute(0, "open", PAnsiChar(GlobalData.FileName), nil, PAnsiChar(ExtractFilePath(GlobalData.FileName)), SW_SHOWNORMAL)
 end
 else
  FCheckVersion := false
end;
end;


GlobalData.FileName - при запуске заполняется ParamStr(0);
GlobalData.Version - соответственно версией

только вот что-то после переименовывания в _test.exe и добавления нового test.exe данный код вытягивает старую версию 2.3.1.958, хотя, ИМХО, должен брать новую - 2.3.1.959.

Где собака порылась? :-) кто подскажет?


 
clickmaker ©   (2005-10-21 17:20) [1]

а что такое GlobalData.FileName?


 
Семен Сорокин ©   (2005-10-21 17:24) [2]


> clickmaker ©   (21.10.05 17:20) [1]
> а что такое GlobalData.FileName?

это record я писал в [0]
GlobalData.FileName - при запуске заполняется ParamStr(0);
GlobalData.Version - соответственно версией


 
clickmaker ©   (2005-10-21 17:29) [3]


> Семен Сорокин ©   (21.10.05 17:24) [2]

а, ну да...
а зачем вовще такие сложности с таймером, переименованием...?


 
umbra ©   (2005-10-21 17:31) [4]

Честно говоря, мне не верится, что можно переименовать файл, отображенный в память. может я темный, но не верю. да и сабж об этом говорит. для обновления файла все же лучше его закрыть, заменить, запустить заново.


 
BiN ©   (2005-10-21 17:34) [5]


> Семен Сорокин ©   (21.10.05 17:04)


Вместо GlobalData.FileName  "test.exe" подставлял?


 
Семен Сорокин ©   (2005-10-21 17:36) [6]


> clickmaker ©   (21.10.05 17:29) [3]
> а, ну да...
> а зачем вовще такие сложности с таймером, переименованием.
> ..?

файл находится на сервере, его одновременно используют много (> 10)человек, я дорабатываю на лету, скидываю версию - при следующем запуске она подхватывается, просто бывает что они неперезапускают exe по несколько суток (диспетчера), и получается что у них стоит уже несколько устаревшая версия.


> umbra ©   (21.10.05 17:31) [4]
> Честно говоря, мне не верится, что можно переименовать файл,
>  отображенный в память. может я темный, но не верю. да и
> сабж об этом говорит. для обновления файла все же лучше
> его закрыть, заменить, запустить заново.

а ты проверь в WinXP - Запусти его и попробуй переименовать.


 
Семен Сорокин ©   (2005-10-21 17:37) [7]


> BiN ©   (21.10.05 17:34) [5]
> Вместо GlobalData.FileName  "test.exe" подставлял?

явно нет, но отладчиком проходил - показывает не переименованный...


 
umbra ©   (2005-10-21 17:45) [8]

нет, что в эксплорере будет видно новое имя - вполне возможно, возражений нет. Но ntfs - журналируемая файловая система, и реальные изменения могут быть отложены на будущее, когда они будут возможны


 
clickmaker ©   (2005-10-21 17:48) [9]

я бы сделал так
ты скидываешь свежак в шару
пишешь что-то типа лончера, в котором сравниваешь локальную и сервачную версии, если свежая - качаешь, запускаешь экзешник.
Для тех, кто сидит безвылазно, можно оставить таймер, но просто напоминать при наличии свежей версии, что мол она появилась, и если вы хотите обновицца, перезапускайтесь


 
Семен Сорокин ©   (2005-10-21 17:54) [10]


> umbra ©   (21.10.05 17:45) [8]
> нет, что в эксплорере будет видно новое имя - вполне возможно,
>  возражений нет. Но ntfs - журналируемая файловая система,
>  и реальные изменения могут быть отложены на будущее, когда
> они будут возможны

хммм, наверное так и есть


> clickmaker ©   (21.10.05 17:48) [9]

придумал похожий механизм, просто наряду с этим проверять другое файло на шаре, тот же текстовик с последней версией файла.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.015 c
2-1133367276
gan
2005-11-30 19:14
2005.12.18
Находимтся ли файл в папке


6-1125814498
murz
2005-09-04 10:14
2005.12.18
Символ


14-1132761794
Solodow
2005-11-23 19:03
2005.12.18
Delphi 2 C#


14-1132911097
Koala
2005-11-25 12:31
2005.12.18
Срочно!!! Нужна помощь в востановлении данных....


4-1129721314
Ден
2005-10-19 15:28
2005.12.18
WinApi Memory





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский