Inno Setup - 如何在线验证序列号

Posted

技术标签:

【中文标题】Inno Setup - 如何在线验证序列号【英文标题】:Inno Setup - How to validate serial number online 【发布时间】:2020-10-07 00:16:42 【问题描述】:

使用 Inno Setup,将setup.exe 提供给客户,根据合同,他只能使用 2016 和 2017。但是在 01-01-2018 他应该不能继续使用相同的序列 2017。

如何使 innosetup 的 setup.exe 限制为 from 和 to date?

[Setup]
#define SerialNumber "2017"
UserInfoPage=yes

[Code]
function CheckSerial(Serial: String): Boolean;
begin
  Result := Serial = '#SerialNumber';
end;
setup.exe 已执行 许可证密钥已插入 提交后,我想查看网址https://www.***.com/query/license?id=2017 如果结果正常或不正常,则安装继续

【问题讨论】:

【参考方案1】:

从Inno Setup - HTTP request - Get www/web content 的代码开始,你会得到类似的东西:

[Setup]
UserInfoPage=yes 

[Code]

// Presence of the CheckSerial event function displays the serial number box.
// But here we accept any non-empty serial.
// We will validate it only in the NextButtonClick,
// as the online validation can take long.
function CheckSerial(Serial: String): Boolean;
begin
  Result := (Serial <> '');
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var
  WinHttpReq: Variant;
  Url: string;
begin
  Result := True;
  if CurPageID = wpUserInfo then
  begin
    WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
    Url := 'https://www.example.com/serial.php?serial=' +
           WizardForm.UserInfoSerialEdit.Text;
    WinHttpReq.Open('GET', Url, False);
    WinHttpReq.Send('');
    // Depending on implementation of the server,
    // use either HTTP status code (.Status)
    // or contents of returned "page" (.ResponseText)
    // Here we use the HTTP status code:
    // 200 = serial is valid, anything else = serial is invalid,
    // and when invalid, we display .ResponseText
    Result := (WinHttpReq.Status = 200);
    if not Result then
      MsgBox(WinHttpReq.ResponseText, mbError, MB_OK);
  end;
end;

一个简单的服务器端验证 PHP 脚本 (serial.php) 如下:

<?

if (empty($_REQUEST["serial"]) || ($_REQUEST["serial"] != "2017"))

    header("HTTP/1.0 401 The serial number is not valid");
    // error message to be displayed in installer
    echo "The serial number is not valid";


供参考:

此验证不难绕过,即使用代理服务器。 它也不会阻止用户从安装程序中提取文件并手动安装它们。 您可以考虑仅在验证序列号后在线下载实际文件。 或下载应用程序运行所需的一些许可文件。无论如何,如果您想在许可证到期后强制应用程序停止工作,您需要这样做。 或者你也可以加密安装程序,让在线服务返回解密密码:Read Inno Setup encryption key from Internet instead of password box

有关类似问题,另请参阅How to store serial numbers in a Sharepoint List, for to call from Inno Setup and verify if is autorized user?

【讨论】:

以上是关于Inno Setup - 如何在线验证序列号的主要内容,如果未能解决你的问题,请参考以下文章

如何更改Inno Setup生成的卸载程序的名字与图标

Inno 设置中序列号的自定义页面

inno setup如何做快速启动栏?

只允许运行一次 Inno Setup 安装程序

inno setup如何打包超过2G的东西

inno setup 如何定制安装最后一步