Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.18;
Скачать: CL | DM;

Вниз

Взять правильную версию переименованого 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 вся ветка

Текущий архив: 2005.12.18;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.055 c
2-1132662738
JTAG
2005-11-22 15:32
2005.12.18
Ув. Доны подскажите понадобилось считать параметры командной


14-1133098594
Piter
2005-11-27 16:36
2005.12.18
Классная фотка, обман зрения


2-1133344255
JTAG
2005-11-30 12:50
2005.12.18
Помогите разобраться с исключительной ситуацией


11-1110649395
Владимир Кладов
2005-03-12 20:43
2005.12.18
нужна необычная обработка исключений для collapse


2-1133252752
sapsi
2005-11-29 11:25
2005.12.18
Одна таблица- 2 грида