在Inno Setup中下载国家/地区

时间:2016-03-24 06:52:17

标签: inno-setup inno-download-plugin

我正在尝试将Inno Setup用于我的软件。目前,我的软件每天从不同的Geo下载超过6000次。问题是我的软件对每个地理位置执行不同的操作,因此我为每个地理位置创建了不同的exe。目前我正在使用Inno Setup作为我的软件的下载管理器。现在如何找到用户来自哪个地理位置,如何告诉我的Inno安装脚本下载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 个答案:

答案 0 :(得分:0)

我不知道解决该位置的最佳方法是什么。这是一个单独的问题。

但你可以使用一些在线服务。

例如https://ipinfo.io/country

它会返回两位数的ICO国家/地区代码。

您可以使用WinHttpRequest来阅读代码。见How to read a text file from the Internet resource?

以下示例显示如何将其与Inno Download Plugin结合使用:

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;
是的,您是否考虑在下载时解决您网站上的地理位置?让用户直接下载一个特定于他/她位置的安装程序?