Форум: "Сети";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];
ВнизМетодика удалённой сверки версий файлов... Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.012 c