Загрузка по стране в 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;
Кстати, вы рассматривали разрешение геолокации на вашем сайте во время загрузки? И позволить ли пользователю загрузить установщик, соответствующий его / ее местоположению напрямую?