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

Вниз

Как реализовать автообновление приложения?   Найти похожие ветки 

 
kserg@ukr.net   (2002-06-04 18:54) [0]

Привет.

Возникла необходимость сделать автообновление моей проги у юзеров. Не имея достаточного опыта сделал я как понимал: на сервере завел папку, куда подкидываю новые версии проги.
А в теле осн.проги вставил проверку времени юзеровской версии ЕХЕ и и версии на сервере.
Если время создания различаются - делаю копирование.
Но т.к. при запущенном ЕХЕ-файле вместо него скопировать новый не возможно, то прога закрывает себя и запускает небольшую сервис-прогу
...
CopyFile(PChar(ParamStr(1)),PChar(ParamStr(2)),false);
WinExec("TimeSheet.exe",SW_SHOWNORMAL);
...
вначале выполняет копирование сервер->юзер,
а затем вновь загружает осн.прогу.

Заметил, что не всегда проходит копирование.
Такое впечатление, что в случае если копирование еще не завершилось и уже вновь запускается осн.прога, то копирование обрывается.

Народ, присоветуйте чё-нибудь дельное...
Спасибо


 
Volj   (2002-06-04 19:01) [1]

Не проще ли ВСЕГДА запускать сервис-прогу? Она при необходимости выполняет копирование и затем уже основную прогу загружает.
А что касается subj - как осуществляется процесс вызова сервис-проги?


 
Song   (2002-06-04 19:08) [2]

UpGradePath - путь к каталогу, где лежат новый exe файл

Procedure UpGradeCheck;
Var ff:TextFile;
SearchRec,SearchRecOwn:TSearchRec;
S:String;
Begin
IF FindFirst(UpGradePath+"\"+"*.exe",faAnyFile,SearchRec)<>0 then FindClose(SearchRec)
else
IF FindFirst(Application.ExeName,faAnyFile,SearchRecOwn)<>0 then
Begin
FindClose(SearchRecOwn);
FindClose(SearchRec);
End Else
IF not(SearchRec.Size<>SearchRecOwn.Size) then
Begin
FindClose(SearchRecOwn);
FindClose(SearchRec);
End Else IF MessageDlg("Обнаружена обновлёная версия программы. После нажатия кнопки <Ok> текущая копия будет закрыта и будет запущена программа обновления. Для продолжения её работы Вам нужно будет нажать любую клавишу.",mtInformation,[mbOk,mbCancel],0)=mrOk then
// Записываем файл
Begin
AssignFile(ff,"replace.bat");
ReWrite(ff);
S:=ExtractFileDir(Application.ExeName);
try
WriteLn(ff,"@echo off");
WriteLn(ff,"pause");
WriteLn(ff,"cd ""+S+""");
WriteLn(ff,"copy ""+UpgradePath+SearchRec.Name+"""+#32+"""+S+"""+" /Y");
WriteLn(ff,SearchRec.Name);
Flush(ff);
finally
CloseFile(ff);
end;
FindClose(SearchRecOwn);
// Здесь не забудем уничтожить все возможно уже созданные объекты
ShellExecute(Handle,nil,PChar("replace.bat"),nil,nil,SW_MAXIMIZE);
Application.Terminate;
End Else FindClose(SearchRecOwn);
End;


 
Delirium   (2002-06-04 19:30) [3]

Хм, в NT можно просто переименовать исполняемый EXE-шник, положить рядом новый, и запустить его, а прогу родитель - благополучно закрыть и забыть :)


 
Song   (2002-06-04 19:39) [4]

Да ну ? :)


 
Delirium   (2002-06-04 19:41) [5]

> Song

Ну, да! :)
Попробуй сам, у меня так все проги update-тятся (W2k,XP)


 
kserg@ukr.net   (2002-06-05 10:26) [6]

>Volj (04.06.02 19:01)
>Не проще ли ВСЕГДА запускать сервис-прогу? Она при >необходимости выполняет копирование и затем уже основную прогу загружает.

В одной из моих ранних прог так и было - юзер запускал start.exe котр. сверяла версии осн.проги и та если надо копировала новую и тогда уже её запускала... всё благородно работало, но были пару юзеров-умников, котр. запускали приложение не через start.exе, а сразу через осн.прогу. Вот я и решил "усилить" контроль.



>Delirium © (04.06.02 19:30)
>Хм, в NT можно просто переименовать исполняемый EXE-шник
проверил и убедился что под NT можно сделать Rename при загруженном ЕХЕ. Но дело в том, что у меня есть юзеры как под NT так и под W98



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

Форум: "Потрепаться";
Текущий архив: 2002.07.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
3-23495
Ola
2002-06-17 11:29
2002.07.08
Алиас!!!!


3-23461
Ptr
2002-06-14 15:16
2002.07.08
IBQuery


14-23745
VAleksey
2002-06-06 07:09
2002.07.08
Delphi 5. Компиляция и запуск.


3-23471
Alex3000
2002-06-13 14:42
2002.07.08
Ошибка закрытия таблицы


4-23851
chukcha
2002-05-07 17:39
2002.07.08
Не могу подключить библиотеку.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский