Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.014 c
1-43630
Budy
2004-03-02 13:29
2004.03.14
Нажатие мышки вне формы


1-43466
Мыш
2004-02-29 18:27
2004.03.14
ошибка при записи в динамический массив


1-43654
an-na2002
2004-03-02 04:24
2004.03.14
TEdit


3-43290
comwad
2004-02-11 15:38
2004.03.14
Проблема с DBGrid


1-43489
dr Tr0jan
2004-02-29 13:48
2004.03.14
Передача данных между сервисом и CPL-апплетом





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