Ошибка в обновлении программы

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ошибка в обновлении программы

Сообщение mrkaban » 21.03.2019 18:13:09

Здравствуйте, помогите пожалуйста, ранее работало, сейчас перестало, то ли от обновления движка сайта, то ли от изменений у хостинг провайдера.

В коде изменений не было. В общем, ближе к делу.

Опытным удалось понять, что проблема в строке

version:=IdHTTP1.Get('https://xn--90abhbolvbbfgb9aje4m.xn--p1ai/images/lpro-base-version.txt');

Если написать version:='111'; тогда механизм срабатывает без проблем.

версия берётся из текстового файла на сайте, и если версия в программе не соответствует версии на сайте, тогда обновляем.

Помогите пожалуйста решить проблему с получением версии из текстового файла

Код: Выделить всё

procedure TfUpdate.bUpdateBaseClick(Sender: TObject);
var
version:WideString;
Response:TFileStream;
begin

try
   version:=IdHTTP1.Get('https://xn--90abhbolvbbfgb9aje4m.xn--p1ai/images/lpro-base-version.txt');

   if version=lVersionBase.Caption then
    begin
     Application.MessageBox('У Вас самая новая версия базы','Внимание',MB_OK);
     Exit;
    end
   else
    begin
     Application.MessageBox('Появилась новая версия базы, сейчас она будет загружена.','Внимание',MB_OK);


  Response:=TFileStream.Create('Lpro.db', fmCreate);
  IdHTTP1.Get('https://xn--90abhbolvbbfgb9aje4m.xn--p1ai/images/Lpro.db',Response);

  // нужно сохранить архив
  TMemoryStream(Response).SaveToFile('Lpro.db');

    end;
  except
   on e:Exception do
    //-//-//-//-//-//

  end;
 
         //меняем версию
   AssignFile(FileVerBase, UTF8ToSys('base.txt'));
   try
    Rewrite(FileVerBase);
    Append(FileVerBase);
    Write(FileVerBase, version);
  finally
    CloseFile(FileVerBase);
  end;

     TMemoryStream(Response).Free;

     //Меняем надпись версий
  AssignFile(FileVerBase, UTF8ToSys('base.txt'));
  Reset(FileVerBase);
  AssignFile(FileVerProg, UTF8ToSys('prog.txt'));
  Reset(FileVerProg);
  Readln(FileVerBase, VerBase);
  Readln(FileVerProg, VerProg);
  lVersionBase.Caption:=VerBase;
  lVersionProgram.Caption:=VerProg;

  CloseFile(FileVerBase);
  CloseFile(FileVerProg);


        Application.MessageBox('Загрузка завершена','Внимание',MB_OK);

end;

mrkaban
новенький
 
Сообщения: 55
Зарегистрирован: 28.05.2016 09:48:18

Re: Ошибка в обновлении программы

Сообщение Дож » 21.03.2019 19:10:47

Что же происходит в этой строке? Она кидает исключение? Какое?
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Ошибка в обновлении программы

Сообщение mrkaban » 21.03.2019 19:18:28

Дож писал(а):Что же происходит в этой строке? Она кидает исключение? Какое?

Прошу прощения, не показал саму ошибку.
Изображение
mrkaban
новенький
 
Сообщения: 55
Зарегистрирован: 28.05.2016 09:48:18

Re: Ошибка в обновлении программы

Сообщение Снег Север » 21.03.2019 19:33:34

URL кирилицей... Не знаю, работает ли IdHTTP1.Get с таким...
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2990
Зарегистрирован: 27.11.2007 16:14:47

Re: Ошибка в обновлении программы

Сообщение Дож » 21.03.2019 19:52:37

mrkaban, AV ни о чём не говорит. Вы должны найти строку и причину, из-за которой оно возникает.

Подсказка: в строке TMemoryStream(Response).Free произойдёт AV, если перед этим не выполнялось Response:=TFileStream.Create('Lpro.db', fmCreate);. Не выполниться оно могло, если в соответствующей try..except секции было кинуто исключение, и далее втихую проигнорировано в except секции.

Так вот. Повторяю свои вопросы. Кидается ли исключение в try..except секции? Если да, то какое?
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Ошибка в обновлении программы

Сообщение pupsik » 21.03.2019 21:53:01

Отшлифовать в то что вам надо.

п.с.
version:WideString;
почЕму???

Снег Север декодировать строку и пройдёт кирилица и не только. Правда, в коде, явно декодируют... только вот как :mrgreen:
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Ошибка в обновлении программы

Сообщение mrkaban » 22.03.2019 18:39:15

Снег Север писал(а):URL кирилицей... Не знаю, работает ли IdHTTP1.Get с таким...


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

Дож писал(а):mrkaban, AV ни о чём не говорит. Вы должны найти строку и причину, из-за которой оно возникает.

Подсказка: в строке TMemoryStream(Response).Free произойдёт AV, если перед этим не выполнялось Response:=TFileStream.Create('Lpro.db', fmCreate);. Не выполниться оно могло, если в соответствующей try..except секции было кинуто исключение, и далее втихую проигнорировано в except секции.

Так вот. Повторяю свои вопросы. Кидается ли исключение в try..except секции? Если да, то какое?


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

Прошу прощения, но как именно посмотреть исключения?

Если убрать конструкцию try..except, тогда вылетает следующая ошибка.
Изображение



PS: LazAutoUpdater видел, он выглядит простым, за исключением сборки инсталлятора для замены одного файла. Может быть этот код на Ваш взгляд примитивен, но он выполнял свою задачу на отлично.

Добавлено спустя 6 минут 59 секунд:
Спасибо за помощь, помогла разобраться именно последняя ошибка, начал гуглить, и понял, что могли измениться настройки SSL на сервере. Потыкал TIdSSLOptions и нашел решение проблемы.
mrkaban
новенький
 
Сообщения: 55
Зарегистрирован: 28.05.2016 09:48:18

Re: Ошибка в обновлении программы

Сообщение Дож » 22.03.2019 19:15:27

Прошу прощения, но как именно посмотреть исключения?

В своём изначальном коде вы сделали так, чтобы об исключении не узнал никто: проигнорировали его в except секции. Чтобы видеть ошибки, исключения нужно не игнорировать, а возвращать наверх, выдавать MessageBox'ом, писать в лог, или ещё как-то обрабатывать.

Может быть этот код на Ваш взгляд примитивен, но он выполнял свою задачу на отлично.

Это здорово, я очень рад за прошлые заслуги вашего кода. Но в данный момент вы получили AV в строке TMemoryStream(Response).Free; , потому что удалили объект, который не создали.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Ошибка в обновлении программы

Сообщение mrkaban » 22.03.2019 19:40:37

Дож писал(а):
Прошу прощения, но как именно посмотреть исключения?

В своём изначальном коде вы сделали так, чтобы об исключении не узнал никто: проигнорировали его в except секции. Чтобы видеть ошибки, исключения нужно не игнорировать, а возвращать наверх, выдавать MessageBox'ом, писать в лог, или ещё как-то обрабатывать.

Может быть этот код на Ваш взгляд примитивен, но он выполнял свою задачу на отлично.

Это здорово, я очень рад за прошлые заслуги вашего кода. Но в данный момент вы получили AV в строке TMemoryStream(Response).Free; , потому что удалили объект, который не создали.


Посмотрел как выдавать ошибку, это не сложно, спасибо.

Суть проблемы именно в настройках соединения. Видимо хостинг-провайдер изменил настройки SSL.
mrkaban
новенький
 
Сообщения: 55
Зарегистрирован: 28.05.2016 09:48:18


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19

Рейтинг@Mail.ru