Форум программистов, компьютерный форум, киберфорум
Delphi: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/51: Рейтинг темы: голосов - 51, средняя оценка - 4.53
 Аватар для Ranger
12 / 12 / 2
Регистрация: 03.10.2008
Сообщений: 437

Проверка новой версии программы

06.01.2009, 20:22. Показов 9571. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сделать проверку выхода новой версии программы, предполагается что прога должна коннектится к сайту (или FTP) и по названию файла сверять версию, если версия более новая, чем та, с которой проверяется, тогда выдавала бы ссылку на скачивание, либо сама скачивала?
Например программа версии 1, в ней выбрали "проверить новую версию"
и она должна коннектится по www.mysite/myproga/proga.v2.exe выдавала бы сообщение, что есть новая версия программы и ее можно скачать по этой ссылке, в противном случае выдавалось, что обновлений нет.

Добавлено через 5 минут 55 секунд
Требования немного изменились, проверка должна прочитывать файл версии который находится на неком сайте, с таким содержанием: номер последней версии и ссылка на его скачивание, далее должно быть так, как написано в предыдущем посте.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.01.2009, 20:22
Ответы с готовыми решениями:

проверка версии программы с сервером
У меня есть чат и сервер к нему. И то и другое написано на делфи с помощью сокетов. Возник вопрос, как сделать так что бы когда я...

Проверка новой версии программы
Всем привет, Есть некий код проверки новой версии программы. Помогите упростить код. И еще как можно приделать скачивание файла и...

Проверка на наличие новой версии программы
У меня есть код для моей программы на C# но мне надо чтобы такая же проверка была и в моей программе на C++ Вот код для C# Version...

34
 Аватар для GalaX
701 / 573 / 59
Регистрация: 18.11.2008
Сообщений: 2,147
06.01.2009, 20:23
а в чем проблема, что именно неполучается?
0
 Аватар для Ranger
12 / 12 / 2
Регистрация: 03.10.2008
Сообщений: 437
06.01.2009, 20:29  [ТС]
Не знаю как осуществить подключение к сайту и считывание текста файла версии.
0
 Аватар для GalaX
701 / 573 / 59
Регистрация: 18.11.2008
Сообщений: 2,147
06.01.2009, 20:30
читай как обычный файл, как у себя с винта читаешь
assign(), read(), close() и т.п.
0
 Аватар для Ranger
12 / 12 / 2
Регистрация: 03.10.2008
Сообщений: 437
06.01.2009, 20:34  [ТС]
а компонент винсокса нужен?
0
 Аватар для GalaX
701 / 573 / 59
Регистрация: 18.11.2008
Сообщений: 2,147
06.01.2009, 20:38
да нет наверное, ведь получается что ты обычный текстовый файл читаешь
0
 Аватар для Ranger
12 / 12 / 2
Регистрация: 03.10.2008
Сообщений: 437
06.01.2009, 21:15  [ТС]
FileExists('http://127.0.0.1/ver.txt') выдает False, хотя файл точно есть, в браузере открыл.
Разве стандартные файловые функции работают с WEB-протоколом?
0
 Аватар для GalaX
701 / 573 / 59
Регистрация: 18.11.2008
Сообщений: 2,147
06.01.2009, 21:47
хм... может я че-то ступил, может так действительно нельзя
ну тогда можешь попробовать через сокеты получить этот файл подключившись к 80-му порту... это думаю должно точно сработать...
0
 Аватар для Ranger
12 / 12 / 2
Регистрация: 03.10.2008
Сообщений: 437
06.01.2009, 21:51  [ТС]
Поставил компонент КлиентСокет, прописал адрес, порт, и какой код писать для получения файла по веб?
0
 Аватар для GalaX
701 / 573 / 59
Регистрация: 18.11.2008
Сообщений: 2,147
06.01.2009, 22:15
Цитата Сообщение от Ranger Посмотреть сообщение
и какой код писать для получения файла по веб?
это я незнаю, я в делфи давно не сидел... уже непомню...
0
Почетный модератор
 Аватар для Humanoid
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
06.01.2009, 23:01
Цитата Сообщение от Ranger
Поставил компонент КлиентСокет, прописал адрес, порт, и какой код писать для получения файла по веб?
'GET /version.txt HTTP/1.0'#13#10+
'Host: 127.0.0.1'#13#10#13#10;

В данном случае мы запрашиваем файл /version.txt
Хотя, на практике можно и не указывать Host, но лучше всё же указать. Host - это имя сервера. Этих двух строк достаточно. Обрати внимание, что в конце два перевода строки... это признак того, что запрос закончен.

Ответ придёт примерно такой:
Code
1
2
3
4
5
6
7
8
9
10
HTTP/1.1 200 OK
Date: Tue, 06 Jan 2009 19:54:45 GMT
Server: Apache/2.2.11 (Win32) mod_ssl/2.2.11 OpenSSL/0.9.8i PHP/5.2.8
X-Powered-By: PHP/5.2.8
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified: Tue, 06 Jan 2009 19:54:51GMT
Pragma: no-cache
Content-Length: 3784
Connection: close
Content-Type: text/html; charset=utf-8
После этого два перевода строки и само содержимое файла. Т.к. мы не указали в запросе Connection: Keep-Alive (а в ответе пришло поддтверждение Connection: close), значит когда весь файл будет передан, то соединение закроется. Либо можно узнать размер файла из заголовка ответа (Content-Length)... в моём примере это 3784 байт.
В первой строке ответа код 200 означает что всё нормально... файл существует и отправлен. В нашем случае всё что отлично от 200 можно расценивать как ошибку.
0
 Аватар для Ranger
12 / 12 / 2
Регистрация: 03.10.2008
Сообщений: 437
06.01.2009, 23:04  [ТС]
Решил, что проще будет воспользоваться IdHTTP1.Get, подскажите как проверить наличие страницы в интернете (аналогично FileExists на компе)?
0
Почетный модератор
 Аватар для Humanoid
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
06.01.2009, 23:07
Цитата Сообщение от Ranger
подскажите как проверить наличие страницы в интернете (аналогично FileExists на компе)?
Отправить такой же запрос... только вместо GET указать HEAD. При этом он вернёт все заголовки, но сам файл отсылать не будет. А по заголовку можно понять, существует файл или нет (если не существует, то вернет код 404). Только как это сделать средствами IdHTTP я не знаю... я использую свой компонент.
0
 Аватар для Ranger
12 / 12 / 2
Регистрация: 03.10.2008
Сообщений: 437
06.01.2009, 23:29  [ТС]
IdHTTP1.head такого нет

Добавлено через 4 минуты 6 секунд
хотя нет, облом IdHTTP1.Get при работе с текстовым файлом просто делает переносы строки, равыне кол-ву строк, но текст не выводит.

Добавлено через 15 минут 19 секунд
Добавлено через 4 минуты 6 секунд
хотя нет, облом IdHTTP1.Get при работе с текстовым файлом просто делает переносы строки, равыне кол-ву строк, но текст не выводит.[/QUOTE]
Это моя ошибка, не тот файл изменил(
1 вопрос все еще в силе
0
Почетный модератор
 Аватар для Humanoid
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
06.01.2009, 23:32
Если IdHTTP не устраивает, то можешь попробовать это... подключи модуль HumHTTP
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Var HTTP : THumHTTPClient;
Begin
  HTTP := THumHTTPClient.Create;
  If not HTTP.Download('http://127.0.0.1/version.txt','',HTTP_HEAD {Только проверить}) then ShowMessage('Не удалось подключиться');
  If HTTP.ResCode<>200 then
    ShowMessage('Файл не найден')
  else
  Begin
    HTTP.Download('http://127.0.0.1/version.txt','',HTTP_GET);  // Скачать
    S := HTTP.Body; // Содержимое файла
// Либо можно указать второй аргумент - имя файла... тогда сохранит в этот файл
    HTTP.Download('http://127.0.0.1/version.txt','C:\file.txt',HTTP_GET);
  End;
  HTTP.Free;
End;
Уже второй раз его выкладываю... надо будет написать нормальную инструкцию
Вложения
Тип файла: rar HTTP.rar (10.3 Кб, 96 просмотров)
1
 Аватар для Ranger
12 / 12 / 2
Регистрация: 03.10.2008
Сообщений: 437
07.01.2009, 00:08  [ТС]
Как в IdHTTP1.Get обозначить номер строки?
Например хочу на кнопку вывести только 2 строку:
Button1.Caption:=2 строку от(IdHTTP1.Get('http://localhost/ver.txt'));
0
17 / 14 / 3
Регистрация: 16.09.2008
Сообщений: 335
07.01.2009, 00:31
Вот функция которая закацивает фаил, просто доавь wininet в uses !
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
function DownloadFile(const hwd:cardinal; const from:string;
                      const tos:string; out size:integer;
                       cmd:integer):boolean;  Export; stdcall;
var
  F: File;
  ResumePos, BufferLen, SumSize: DWORD;
  hSession, hURL: HInternet;
  Buffer: array[1..1024] of Byte;
  nado,err: boolean;
begin
 Result:=False;
 SumSize := 0;
 ResumePos := 0;  //Èíèöèàëèçèðóåìñÿ
 AssignFile(F, tos); //Ñâÿæåìñÿ ñ ôàéëîì
 IF GetFileSize(tos) > 3 then //Åñòü ëè íà äèñêå ýòîò ôàéë
 begin
  Reset(f); //Ax, åñòü? Îòêðîåì!
  ResumePos:=FileSize(F); //Îòêóäà äîêà÷àòü
  Seek(F, FileSize(F)); //À ïèñàòü áóäåì â êîíåö
 end
   else
   ReWrite(f); //À ðàç íåò, òàê ñîçäàäèì
 NADO := TRUE; //Íàäî êà÷àòü...
   //Îòêðûëè ñåññèþ
 hSession:=InternetOpen(PChar(ParamSTr(0)), PRE_CONFIG_INTERNET_ACCESS, nil, nil, 0);
   //È íàø ÓÐË
 hURL := InternetOpenURL(hSession,PChar(from),nil, 0, cmd, 0);
   //Ñêîëüêî òàì íàø ôàéë âåñèò?
 internetQueryDataAvailable(hURL,SumSize,0,0);
 size:=SumSize; //Ñîîáùèì îá ýòîì
 if ResumePos>0 then //Åñëè äîêà÷èâàåì,
 begin
  InternetSetFilePointer(hURL,ResumePos,nil,0,0); //Òî ñìåñòèìñÿ
 end;
 REPEAT //Êà÷àåì             
  err:=InternetReadFile(hURL, @Buffer,SizeOf(Buffer),BufferLen); //×èòàåì áóôåð
  IF err= false then //Îøèáêà ÷òåíèÿ
  begin
   MessageBox(0,'Ïðîèçîøåë îáëîì :(','ERROR',MB_ICONERROR +MB_OK); //Ñîîáùèì è âûõîäèì
   exit;
  end;
  BlockWrite(f, Buffer, BufferLen); //Ïèøåì â ôàéë
 
 UNTIL
  (BufferLen = 0) or (NADO = FALSE);
    //Êà÷àåì, ïîêà íå âñå èëè íàäî
 CloseFile(f);
 InternetCloseHandle(hSession)   ;
 Result:=True;
    // MessageBox (0,'Óñïåøíî çàãðóæåíî!','',MB_OK);
end;
0
 Аватар для Ranger
12 / 12 / 2
Регистрация: 03.10.2008
Сообщений: 437
07.01.2009, 00:47  [ТС]
А кто мне ответит на последний вопрос?
0
17 / 14 / 3
Регистрация: 16.09.2008
Сообщений: 335
07.01.2009, 01:13
закачиваешь на свой сайт бинарный файл . вот примерное содержимое его . Допустим 1 байт это версия этого бинарника можно не использовать но вдруг пригодиться! 2и 3 байты (в зависимости как часто и как долго ты пудешь выпускать свой продукт может и понодобиться 3 байта для этого) в этих байтах храниться номер версии к примеру 1-0.0.1.0 2-0.1.2 3-1.15.15 вообщем понял.4-5 байты у казатели на ссылку с твоей прогой. 6-7 длинну ссылки. итд! ход мыслей понятен ?
0
 Аватар для Ranger
12 / 12 / 2
Регистрация: 03.10.2008
Сообщений: 437
07.01.2009, 01:23  [ТС]
это понятно, но разве нет способов разделить запрос на строки?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.01.2009, 01:23
Помогаю со студенческими работами здесь

Проверка на наличие новой версии программы
Ребят у меня есть моя программа но мне надо сделать так чтобы она могла проверять на наличие новый версии программа А именно программа...

Проверка на наличие более новой версии программы
Посоветуйте как можно организовать проверку программы на сервере(сайте) на более новую версию.. Я делаю так: Есть файл на сервере (в...

Проверка новой версии
Проверяю новую версию программы в onshow , вот так: function THome.IsInternetConnected: Boolean; var connectiontype: DWORD ; ...

Проверка новой версии
Здравствуйте, скажите как можно сделать проверку новой версии? Т.е. я написал скрипт им будут (наверно) пользоваться, и хочу в админке...

Проверка новой версии на фтп
Нужно сделать так: 1)запускаем программу,она автоматически проверяет версию файла на сервере. 2)Если версия меньше той которая у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru