gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:14:12 26 4
gpt4 key购买 nike

使用 Inno Setup,setup.exe 被提供给客户,根据契约(Contract)他只能使用 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 被执行
  • 已插入许可证 key
  • 提交后,我想检查 URL https://www.example.com/query/license?id=2017
  • 如果基于该结果是 ok 或 nok,则安装继续

最佳答案

从以下代码开始: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";
}

enter image description here


供考虑:

  • 这种验证不难绕过,即使用代理服务器。
  • 它也不会阻止用户从安装程序中提取文件并手动安装它们。
  • 您可以考虑仅在验证序列号后在线下载实际文件。
  • 或者下载应用程序运行所需的一些许可文件。如果您想强制应用程序在许可证过期后停止工作,无论如何您都需要它。
  • 或者你也可以加密安装程序,让在线服务返回解密密码:
    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?

关于windows - Inno Setup - 如何在线验证序列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46360052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com