На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ Inno Setup
Пожалуйста, выделяйте текст инсталлятора написанного на Inno Setup тегом [сode=ins] ... [/сode]. Для этого используйте кнопку [code=ins] в форме ответа или выпадающего списка, если нужно вставить код из другой программы.


Обязательно указывать:

  • Программу, используемую для создания инсталлятора.



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


Выразить свое отношение к модераторам раздела можно здесь: Profi, Fester
Модераторы: Fester
  
> [InnoSetup] Скачать файл через URLDownloadToFileA , почему не работает у половины клиентов
    Доброго времени суток.
    Когда-то давно реализовал в процессе установки закачку нужного файла с сервера и размещение его в папке с установленной программой через функцию
    URLDownloadToFileA (URLMON.DLL). После многочисленных жалоб обнаружил что файл не скачивается примерно в случае 50-60% установок.
    Просто не уходит запрос (именно по количеству дошедших до сервера сообщений об успещной установке и запросе файла идет статистика ошибки).
    Функция существует во всех версиях винды начиная с Windows XP. К сожалению, конечные пользователи не компетентны в этих вопросах, а у меня баг почти не проявляется: раз в 5-6 установок может и не скачаться. Есть минимум 1 пользователь, у которого после 5-10 установок (точно не сказал) ни разу файл не скачался.

    Скачиваемый файл - текстовый. Дело 100% не в сервере - он отдает файл всегда, это не нагрузка. Сервер смотрит в сеть напрямую, блокировка "ботов" сервисами типа CloudFlare исключена.
    Код скрипта InnoSetup
    ExpandedWrap disabled
      function UrlDownloadToFile(Caller: cardinal; URL: PAnsiChar; FileName: PAnsiChar; Reserved: DWORD; StatusCB: cardinal): Longword; external 'URLDownloadToFileA@URLMON.DLL stdcall';
      function GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall';
       
      procedure CurPageChanged(CurPageID: Integer);
      var
        Response: Longword;
        url : PAnsiChar;
      begin
           url:='http://mydomain.com/_installed.php?v=....'; //сливается информация о версии и языке ОС, билд программы, защита от кеширования
           Response:=UrlDownloadToFile(0, url, PAnsiChar(ExpandConstant('{tmp}') + 'installed.log'), 0, 0); //это само отписывание в лог
           WizardForm.NextButton.Enabled := False;
           url:='http://mydomain.com/_latestdata.php&nocache='+inttostr(GetTickCount);
           Response:=UrlDownloadToFile(0, url, PAnsiChar(ExpandConstant('{app}') + '\data.db'), 0, 0);
           WizardForm.NextButton.Enabled := true;


    Есть идеи, почему это может происходить?
    Сообщение отредактировано: Виталь -
      Как вариант, можно писать Response в лог. Чему он может быть равен - тут, а расшифровка констант здесь и здесь.
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0194 ]   [ 16 queries used ]   [ Generated: 28.03.24, 14:53 GMT ]