Загрузка по стране в Inno Setup

Я пытаюсь использовать Inno Setup для своего программного обеспечения. В настоящее время мое программное обеспечение получает более 6000 загрузок в день с разных Geo. Проблема в том, что мои программы работают по-разному для каждого гео, поэтому я создал разные exe для каждого гео. В настоящее время я использую Inno Setup в качестве менеджера загрузок для моего программного обеспечения. Теперь, как найти пользователя из какого географического положения и как я могу сказать моему сценарию Inno Setup скачать exe, откуда пользователь.

На данный момент что у меня сейчас:

#define MyAppName ""
#define MyAppVersion "1"
#define _URL ""
#define _exeFileName "setup.exe"
#include ReadReg(HKEY_LOCAL_MACHINE,'Software\Sherlock Software\InnoTools\Downloader','ScriptPath','');
[Setup]
AppId={{7B0D8E4E-BAFD-400B-B775-0DD7D8FBAE08}
AppName={#MyAppName}
AppVersion={#MyAppVersion};
AppVerName={#MyAppName} {#MyAppVersion}
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
DisableFinishedPage=yes
OutputBaseFilename={#MyAppName}{#MyAppVersion}
Compression=lzma
SolidCompression=yes
DisableWelcomePage=yes
DisableReadyPage=yes
DisableReadyMemo=True
Uninstallable=no
RestartIfNeededByRun=no                     
CreateAppDir=False
UsePreviousGroup=False

Если кто-то может помочь мне с этим, будет здорово.

заранее спасибо

1 ответ

Решение

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

Но вы можете использовать некоторые онлайн-сервисы.

Например, https://ipinfo.io/country

Возвращает двузначный код страны ICO.

Вы можете использовать WinHttpRequest читать код. См. Как прочитать текстовый файл с интернет-ресурса?


В следующем примере показано, как объединить это с плагином загрузки Inno:

var
  Country: string;

function GetCountry: string;
var
  WinHttpReq: Variant;
begin
  if Country <> '' then
  begin
    Log(Format('Using cached country: %s', [Country]));
    Result := Country;
  end
    else
  begin
    try
      WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
      WinHttpReq.Open('GET', 'https://ipinfo.io/country', False);
      WinHttpReq.Send;
      Result := Trim(WinHttpReq.ResponseText);
    except
      Log(GetExceptionMessage);
      Result := 'XX';
    end;

    Country := Result;
    Log(Format('Resolved country: %s', [Country]));
  end;
end;

function InitializeSetup(): Boolean;
begin
  idpAddFile(
    'https://example.com/file-for-' + GetCountry + '.exe',
    ExpandConstant('{tmp}\file.exe'));
end;

Кстати, вы рассматривали разрешение геолокации на вашем сайте во время загрузки? И позволить ли пользователю загрузить установщик, соответствующий его / ее местоположению напрямую?

Другие вопросы по тегам