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

Вниз

Методика удалённой сверки версий файлов...   Найти похожие ветки 

 
Makhanev A.S. ©   (2003-12-31 19:33) [0]

Локальная сеть.
На двух машинах (Клиент-Сервер) один и тот же файл.
На сервере обновился файл.
Клиент запрашивает у сервера данные об обновлении файла на сервере, сравнивает с данными о своём файле и, если необходимо, обновляет.

Вопрос: что брать в качестве данных об обновлении?

CRC32? // а если только один байт поменялся(опечатку в слове исправили)...
LastModifiedDate? // а если дата на машине менялась...


 
raidan ©   (2004-01-01 20:28) [1]

А что у тебя за файл: программа, БД, документ Word?

К тому же: "а если дата на машине менялась..." - вопрос не имеющий смысла!
Если качаешь файл с сервера, то будь добр - ставь на нем дату и время файла, которые стоят на этом файле на сервере!
Тогда, при обновлении, тебе нужно будет просто сравнить дату и время файла на сервере (дата и время не поменяются, если файл не будет изменен) и на клиенте. Если они разные, то качай новую версию...

ИМХО - это самое простое, если не хочешь возиться с написанием своего собственного PatchBuilder"а :)


 
Rouse_ ©   (2004-01-02 12:29) [2]

> CRC32? // а если только один байт поменялся(опечатку
> в слове исправили)...
> LastModifiedDate? // а если дата на машине менялась...

Собственная инкрементная метка в теле файла...


 
Anatoly Podgoretsky ©   (2004-01-02 12:56) [3]

INI файл на сервере, кроме основного назначения, может содержать и список всех существующих версия, если обновление должно быть последовательное и любую другую информацию


 
Sir Alex ©   (2004-01-03 14:58) [4]

А как потом заменить старый файл на новый? Т.е. если я запустил exe"шник, нашел обновленный, скачал его допустим в prog.tmp, а что дальше?


 
Rouse_ ©   (2004-01-03 15:55) [5]

> [4] Sir Alex © (03.01.04 14:58)
Ну Вы блин даете... (без смайлов)


 
raidan ©   (2004-01-03 19:00) [6]


> А как потом заменить старый файл на новый? Т.е. если я запустил
> exe"шник, нашел обновленный, скачал его допустим в prog.tmp,
> а что дальше?

Правой кнопкой мыши перетаскиваешь, потом "Переместить" и "Заменить"... (без смайлов)


 
Sir Alex ©   (2004-01-03 19:34) [7]

2 Rouse_ & raidan
Просто гении....

Как нить пользоваться Explorer"om, TotCmd, CommandLine я умею...

А, что такое смайлы? :)

Мой вопрос:
Как запущенная программа (exe) может поверх себя переписать другой?
Я например вижу только вариант: запускается загрузчик основной программы, проверяет ее обновление на сервере, если новая, то скачивает ее, переписывает поверх старой, запускает...
Так вот как это реализовать в одном exe"шнике?


 
TButton ©   (2004-01-03 21:05) [8]

в одном? никак. пиши загрузчик. или пиши прогу которая будет:
1. удалять prog.exe
2. переименовывать prog.tmp в prog.exe


 
Sir Alex ©   (2004-01-03 23:50) [9]

2 TButton
Можно. Вот маленький пример:
Сценарий:
1. Программа заходит на сайт (сервер), проверяет обновление, закачивает его в файл update.exe
2. Выполняет:

tmpstr:string;
tmpstr:="/update"+inttostr(GetCurrentProcessID);
ShellExecute(Application.Handle, "open", "update.exe", PChar(tmpstr), PChar(ProgPath), SW_SHOWDEFAULT);
Close;

3. А вот начало нашей программы:

if paramCount=1 then begin
tmpstr:=paramStr(1);
if pos("update",tmpstr)=2 then begin
delete (tmpstr,1,7);
mainProcessID:=strtoint64(tmpstr);
mainHandle:=OpenProcess (SYNCHRONIZE,false,mainProcessID);
tmpstr:=ExtractFilePath (Application.ExeName)+"/ufc.exe";
if (mainHandle<>0) then
if WaitForSingleObject (mainHandle,10000)<>WAIT_OBJECT_0 then
exit;
if sysUtils.DeleteFile (tmpstr) then
RenameFile (Application.ExeName,tmpstr);
end;
end;

Этот кусочек, ждет завершения основной программы и переименовывает update.exe в ufc.exe.
4. Вот и все. Программа сама себя обновила... Во всяком случае без помощи каких-либо загрузчиков или отдельных программ.

P.S. В общем все оказалось достаточно просто. Хотя может есть другие способы, более простые (хотя куда проще)?


 
TButton ©   (2004-01-04 17:41) [10]

согласен, был неправ, просто с шеллом, который екзекьют, плохо знаком


 
Sir Alex ©   (2004-01-04 18:51) [11]

2 TButton
А ShellExecute, тут совсем не причем, он просто запускает update.exe c параметром /update

2 All
Так все же, как поступает народ при обновлении?



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

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

Наверх




Память: 0.49 MB
Время: 0.021 c
14-43772
Beria
2004-02-17 06:49
2004.03.14
С чего начать делать игру? - КОНЕЧНО С ВЫБОРА СРЕДЫ!!


3-43296
hva
2004-02-11 15:30
2004.03.14
Как перехватить TClientDataSet.CommandText


14-43792
NAlexey
2004-02-18 15:06
2004.03.14
Pos - скорость.


14-43798
PVOzerski
2004-02-17 17:28
2004.03.14
глюк в Netscape 4.8?


3-43280
Руслан
2004-02-17 13:07
2004.03.14
шрифт из Delphi на Access