2016-03-24 106 views
1

我正在尝试为我的软件使用Inno Setup。目前,我的软件每天从不同的Geo获得6000多次下载。问题是我的软件对每个地理位置的表现都不同,所以我为每个地理位置创建了不同的exe。目前,我正在使用Inno Setup作为我的软件的下载管理器。现在怎么能找到用户来自哪个地理区域,以及如何告诉我的Inno Setup脚本下载exe文件,用户来自哪里。Inno Setup中的国家/地区下载

目前我现在有:

#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

这是一个相当广泛的问题。你在这里实际上有两个问题。首先是如何找到用户所在的国家。第二是如何在Inno Setup中使用这些信息。单独提出这些问题。 –

+0

感谢您对我的问题的即时回复,我真的很感谢您为您的专家边界上的每个用户提出的宝贵时间... –

+0

@MartinPrikryl如果您可以教我或指导我如何可以真的很开心使用地理位置或用户的IP地址(准确的位置)找到Inno设置中的用户位置,请帮助我如何做到这一点 注意:我的一个朋友使用http发送请求,但他不愿意分享它 预先感谢您 –

回答

0

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

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

例如,https://ipinfo.io/country

它返回一个两位数ICO国家代码。

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


下面的示例演示如何结合,与创新科技下载插件:

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; 

顺便说一句,你有没有考虑解决在下载的时候网站上的地理位置?并让用户直接下载特定于他/她的位置的安装程序?

+0

非常感谢你,它的作品非常棒,我确实试图做到这一点,但这似乎比这更容易,我也可以学习inno的新技巧。 –

+0

不客气。虽然在StackOverflow我们[感谢接受答案](http://stackoverflow.com/help/someone-answers)。 –

+0

我的回答有帮助吗? –