我正在尝试将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
如果有人能帮我解决这个问题会很棒。
提前致谢
答案 0 :(得分:0)
我不知道解决该位置的最佳方法是什么。这是一个单独的问题。
但你可以使用一些在线服务。
它会返回两位数的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;
是的,您是否考虑在下载时解决您网站上的地理位置?让用户直接下载一个特定于他/她位置的安装程序?