Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обновление программы через сеть / 19 сообщений из 19, страница 1 из 1
05.07.2018, 11:12
    #39669897
delphinub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление программы через сеть
Добрый день!
Прошу помощи в решении проблемы. Реализовываю загрузку обновлений через интернет.
В данный момент пользуюсь этой функцией

Код: pascal
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.
function GetInetFile(const fileURL, FileName: String): boolean;
var
  hSession, hURL: HInternet;
  Buffer: array[1..1024] of Byte;
  BufferLen: DWORD;
  f: File;
  sAppName: String;
begin
  Result:=false;
  sAppName:=ExtractFileName(Application.ExeName);
  hSession:=InternetOpen(PChar(sAppName),INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);
  try
    hURL:=InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0);
    try
      AssignFile(f,FileName);
      ReWrite(f,1);
      repeat
        InternetReadFile(hURL,@Buffer,SizeOf(Buffer),BufferLen);
        BlockWrite(f,Buffer,BufferLen);
        Vers.ProgressBar1.Position:=Vers.ProgressBar1.Position+BufferLen;
        Application.ProcessMessages;
      until
        BufferLen = 0;
      CloseFile(f);
      Result:=True;
    finally
      InternetCloseHandle(hURL);
    end;
  finally
    InternetCloseHandle(hSession);
  end;
end;



и качаю

Код: pascal
1.
2.
if GetInetFile('http://tcprog.mcdir.ru/myprogram.exe',ExtractFilePath(Application.ExeName)+'/myprogram.exe') = true then
.....



так вот проблема в том, что файл качается старый. не обновленный. на сколько я могу судить ин берет его из кэша. Как только не пытался исправить, смотрел флаги запрета использовать кэш - ничего не помогает

Подскажите пожалуйста, как исправить этот код чтобы файл скачивался с сервера последний. Или, может быть, подскажите другую функцию.
Заранее благодарю
...
Рейтинг: 0 / 0
05.07.2018, 11:22
    #39669907
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление программы через сеть
Сервер выставляет Cache-Control?

П.С. Можно еще генерить уникальный параметр ссылки что-то вроде ?123123
...
Рейтинг: 0 / 0
05.07.2018, 11:22
    #39669908
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление программы через сеть
delphinub,

Используй DeleteUrlCacheEntry() перед загрузкой...
...
Рейтинг: 0 / 0
05.07.2018, 11:31
    #39669915
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление программы через сеть
и не ходи по http
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.07.2018, 12:03
    #39669954
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление программы через сеть
wadmanСервер выставляет Cache-Control?

Ещё лучше спросить выставляет ли сервер корректный Last-Modified-Time, поскольку кэши
делают тоже не дураки и проверяют обновление файла на сервере.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.07.2018, 12:06
    #39669957
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление программы через сеть
А я делал через репликацию БД.
И софт и доки и данные (структуры)
...
Рейтинг: 0 / 0
05.07.2018, 13:36
    #39670017
delphinub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление программы через сеть
Мимопроходящий,
а через что? долго мучайся не мог понять как это работает. В итоге взял просто хостинг на макхост и качаю с него файлы
...
Рейтинг: 0 / 0
05.07.2018, 13:38
    #39670019
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление программы через сеть
05.07.2018 13:36, delphinub пишет:
> а через что?

httpS
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.07.2018, 22:06
    #39670315
mvb
mvb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление программы через сеть
delphinub
Код: pascal
1.
hURL:=InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0);



попробуй:
Код: pascal
1.
hURL:= InternetOpenUrl(hSession, PChar(fileURL), nil, 0, INTERNET_FLAG_RELOAD, 0);
...
Рейтинг: 0 / 0
05.07.2018, 22:25
    #39670321
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление программы через сеть
delphinubсмотрел флаги запрета использовать кэш - ничего не помогает
Не вижу я этих флагов в приведенном коде.
Как минимум должны быть в твоем случае INTERNET_FLAG_NO_CACHE_WRITE и INTERNET_FLAG_PRAGMA_NOCACHE.

И еще. Ты зря не любишь анализировать результат функций.
...
Рейтинг: 0 / 0
05.07.2018, 22:28
    #39670323
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление программы через сеть
YuRockINTERNET_FLAG_NO_CACHE_WRITE и INTERNET_FLAG_PRAGMA_NOCACHEДа, и reload, выше сказали.
...
Рейтинг: 0 / 0
05.07.2018, 22:33
    #39670327
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление программы через сеть
delphinub
Код: pascal
1.
'http://tcprog.mcdir.ru/myprogram.exe'

Можно заменить на такой урл:
'http://tcprog.mcdir.ru/myprogram.exe?rnd=1234567890'
где вместо цифр - любая строка из случайных латинских букв и цифр.
...
Рейтинг: 0 / 0
06.07.2018, 13:18
    #39670659
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление программы через сеть
miksoftМожно заменить на такой урл:
' http://tcprog.mcdir.ru/myprogram.exe?rnd=1234567890'
Dimitry SibiryakovЕщё лучше спросить выставляет ли сервер корректный Last-Modified-Time, поскольку кэши делают тоже не дураки и проверяют обновление файла на сервере.
...
Рейтинг: 0 / 0
06.07.2018, 18:11
    #39670841
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление программы через сеть
_Vasilisk_miksoftМожно заменить на такой урл:
' http://tcprog.mcdir.ru/myprogram.exe?rnd=1234567890%27]http://tcprog.mcdir.ru/myprogram.exe?rnd=1234567890%27] http://tcprog.mcdir.ru/myprogram.exe?rnd=1234567890'
Dimitry SibiryakovЕщё лучше спросить выставляет ли сервер корректный Last-Modified-Time, поскольку кэши делают тоже не дураки и проверяют обновление файла на сервере.Одно другому не мешает. Заголовки не всегда поддаются контролю, если это чужой хостинг.
А вот URL вполне поддается.
...
Рейтинг: 0 / 0
06.07.2018, 18:25
    #39670846
Дегтярев Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление программы через сеть
miksoft,

скачивать каждый раз файл, даже если он не изменился не айс
если совсем никак с заголовками, то как вариант положить рядом маленький файл с версией, хешем или еще каким то признаком что основной файл изменился
...
Рейтинг: 0 / 0
06.07.2018, 18:54
    #39670856
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление программы через сеть
Дегтярев Евгенийскачивать каждый раз файл, даже если он не изменился не айсЕсли это делать с разумной периодичностью, например, раз в неделю при количестве установок в пределах сотни, то ничего страшного.
...
Рейтинг: 0 / 0
06.07.2018, 22:32
    #39670913
Wolfpack
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление программы через сеть
Я обновлялки свои делал через Socket, для упрощения все собирал в zip-архив.

Сначала Socket серверу отправлял текущую версию, если на сервере другая, то отправлял zip через сокет и на стороне клиента разворачивал архив.

Есть небольшой геморрой с тем, чтобы проверить запущены ли приложения или dll сейчас, их надо закрыть или выгрузить перед обновлением.

А так есть у мелкософта целый готовый комплекс по обновлению ПО, правда сложный по настройке
...
Рейтинг: 0 / 0
06.07.2018, 22:50
    #39670915
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление программы через сеть
WolfpackЯ обновлялки свои делал через Socket, для упрощения все собирал в zip-архив.

Сначала Socket серверу отправлял текущую версию, если на сервере другая, то отправлял zip через сокет и на стороне клиента разворачивал архив.

Есть небольшой геморрой с тем, чтобы проверить запущены ли приложения или dll сейчас, их надо закрыть или выгрузить перед обновлением.

нет геморроя никакого.
То, что ты стартуешь, не является основной программой.
Это модуль-проверялка обновлений.
Она качает свежатинку и обновляет основной модуль и файлы.
А потом запускает основную программу.
...
Рейтинг: 0 / 0
07.07.2018, 17:23
    #39671051
wupdate
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление программы через сеть
https://www.tmssoftware.com/site/wupdate.asp - а мне вот эту штуку посоветовали здесь в прошлом году. Вещь!!!
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обновление программы через сеть / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]