|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Update для программы
Я хочу сделать апдейт для своей проги тоесть кнопка при нажатии которой программа обращается к моему сайту и проверяет наличие новой версии если есть то обновить если нет то сообщение что новых версий нет Заранее спасибо сайт на народе!!!!!
|
#2
|
|||
|
|||
а хде ваш код?
Собственно алгоритм такой: создаём список файлов и их хешей(md5) программой скачиваем этот список и сверяем с тем что уже есть в программе. если хешь какого-либо файла отличается то, скачиввааем этот файл. |
#3
|
||||
|
||||
да кода пока нет а как реализовать не подскажешь на каком нибудь своём примере а то я не даже не знаю как это делать но надо)))
|
#4
|
||||
|
||||
ну незнаю.. дело вкуса.
Но меня, например, начинает "колбасить" когда какая-то прога без разрешения пытается залезть в инет и что-то там скачать/отправить. Тем более неизвесно кем написанная... |
#5
|
||||
|
||||
не само сообщение вылитать не будет будет кнопка обновить в настройках так чё напишешь
|
#6
|
||||
|
||||
Заплатишь????
|
#7
|
||||
|
||||
Я в свое время делал так:
1)на сервере был txt файл, с номером свежей версии программы. 2)в реестре прописывается ключ с номером текущей версии программы 3)по запросу, скачивается txt файл с свежей версией, сравниваются числа из реестра и из файла, если они различаются - оповещаем о выходе новой версии и предлагаем скачть файл. Вотъ |
#8
|
||||
|
||||
А можно без реестра.
В самой проге написать: const Version = '1.23.456'; качать с сервака версию, если больше текущей - то обновлять. jmp $ ; Happy End! The Cake Is A Lie. |
#9
|
||||
|
||||
так сделаете???? мне очень надо
|
#10
|
||||
|
||||
Сделать - врятли.
Даю ключевые слова: WinSock, socket(), send(), recv(), connect(), bind(), listen(), accept() и т.д. Писать придется и сервера, и клиента. Сервер должен подключать клиентов и слать им строку из текстового файла. Клиент должен принимать строку и сравнивать со своей. Если расходится - значит посылает запрос на закачку файла. Когда сервак принимает запрос на скачку, то начинает слать файл. Желательно, чтобы это был архив - так проще. Хоть тупо запихать все файлы в один и написать в начале заголовок. Я делал в свое время передачу файла по запросу. Передача сама по себе проста - сначала посылаешь размер файла, потом шлешь по запросам через Send пакеты например по 16кб. Можно конечно все сразу, но нехорошо). Клиент же принимает пакет через recv, если его размер меньше 16кб, то ждет остаток (TCP/IP иногда задерживает куски пакетов). После этого шлет запрос на следующий пакет и т.д. Последний пакет ясное дело будет меньше 16кб (хвост файла). jmp $ ; Happy End! The Cake Is A Lie. |
#11
|
||||
|
||||
так хотябы маленький примерчик за бесплатно
|
#12
|
||||
|
||||
сначала где-нить делаем так:
Код:
uses WinSock; ... var sClient,SServer:TSocket; addr:sockaddr_in; s:AnsiString; isize:integer; ... // Инициализация всякой фигни if WSAStartup(MAKEWORD(2, 0), aboutWSA) = 0 then ; Клиент Код:
// Создаём сокет sClient := Socket(AF_INET, SOCK_STREAM, IPPROTO_IP); if sClient = INVALID_SOCKET then begin mmLog.Lines.Add('Ошибка создания сокета'); exit; end; // Заполняем структуру ADDR s := EdtIP.text; // тут IP в виде 192.168.56.13 addr.sin_addr.S_addr := INET_ADDR(PAnsiChar(s)); addr.sin_family := AF_INET; addr.sin_port := htons(7777); // Порт - любое число от 0 до 65535, не занятое никем. лучше брать больше 1000 // Пробуем подключиться if connect(sClient, addr, sizeof(addr)) = SOCKET_ERROR then begin mmLog.Lines.Add('Ошибка подключения'); exit; end; //подключились, работаем Код:
sServer := socket(AF_INET, SOCK_STREAM, IPPROTO_IP); if sServer = INVALID_SOCKET then begin mmLog.Lines.Add('Ошибка создания сокета'); exit; end; addr.sin_addr.S_addr := htonl(INADDR_ANY); addr.sin_family := AF_INET; addr.sin_port := htons(7777); // тот же порт, что и у клиента if bind(sServer, addr, sizeof(addr)) = SOCKET_ERROR then begin mmLog.Lines.Add('Ошибка бинд'); exit; end; if listen(sServer, 4) = SOCKET_ERROR then begin mmLog.Lines.Add('Ошибка прослушки'); exit; end; mmLog.Lines.Add('Server Started'); isize := sizeof(addr); sClient := accept(sServer, @addr, @isize); if sClient = INVALID_SOCKET then begin mmLog.Lines.Add('Ошибка подключения'); exit; end; mmLog.Lines.Add('Подключён ' + inet_ntoa(addr.sin_addr)); // клиент подключился. Если надо постоянно клиентов подключать - в // цикл все это, начиная с accept(), а клиентов в массив пихать. Для // каждого лучше запускать отдельный поток. closesocket(sServer); дальше - Send и Recv. Больше ниче не надобно. jmp $ ; Happy End! The Cake Is A Lie. |
#13
|
|||
|
|||
Примерная схема такова - написать отдельно от клиентской программы второй небольшой EXE-шник для обновления, схема его работы такова:
1) Проверка версий/дат изменений всех критичных к обновлениям файлов у клиента; 2) Отправка этих данных на сервер; 3) Прием файлов, требующих обновления; 4) Запуск непосредственно клиентской программы. Сервер, видя, что к нему пришел клиент и просит проверить необходимость обновления, смотрит на принятые данные, содержащие версии, даты изменения файлов и т.д. В ответ посылает список файлов, требующих обновления, и затем все эти файлы по очереди по любому протоколу (желательно разграничить каналы для работы других клиентов, и для обновлений - иначе чье-то здоровенное обновление, качаемое GPRS'ом, завесит работу других пользователей). Для упрощения работы сервера желательно всегда держать в определенном каталоге полную версию клиента последней версии, с которой он будет сверяться и раздавать необходимые файлы подключающимся. Если к "загрузчику" приделать какую-нибудь заставку и прогрессбар для закачки обновлений - все будет выглядеть очень профессионально и шикарно. |
#14
|
||||
|
||||
да еклмн, есть компонент "auto upgrader pro" и усе, если надо пиши в личку, скину крякнутый уже
|