主页 » 支持 » 用户手册 » 授权系统 » 集成到应用程序 » 步骤1.7:限制免费升级期

步骤1.7:限制免费升级期

这个怎么运作

当 VMProtect 保护应用程序时,它会记录日期。授权系统将此日期视为应用程序的构建日期。您可以在序列号中输入该序列号可以使用的最大构建日期。因此,如果您将当前日期加上一年的序列号,它将适用于您将在一年内发布的所有程序版本。一年后发布的版本将无法使用此序列号,用户可以选择:使用旧版本的程序或购买新密钥以使用最新版本的程序再使用一年。

让我们尝试一下

将格式为 MaxBuildDate=YYYYMMDD 的行放入 ini 文件中:

MaxBuildDate = 20000101

在测试模式下,授权系统将今天视为构建日期,因此这一行中指定的日期已经过去很重要。也就是说,最大日期是昨天。修改 main() 函数的代码,使其看起来像这样:

int main(int argc, char **argv)
{
        char *serial = "Xserialnumber"; // 为简单起见,我们直接在代码中设置序列号。

        int res = VMProtectSetSerialNumber(serial);
        print_state(res);

        if (res)
        {
                VMProtectSerialNumberData sd = {0};
                VMProtectGetSerialNumberData(&sd, sizeof(sd));
                printf("最后编译日期: y = %d, m = %d, d = %d\n", sd.dtMaxBuild.wYear, sd.dtMaxBuild.bMonth, sd.dtMaxBuild.bDay);
                printf("请注册!\n");
                return 0;
        }

        printf("已注册\n");

        return 0;
}

然后,在程序运行后,您应该看到以下内容:

state = SERIAL_STATE_FLAG_MAX_BUILD_EXPIRED
最后编译日期: y = 2000, m = 1, d = 1
请注册!

通过将 ini 文件中的日期替换为今天或明天,我们最终得到了 “工作” 程序:

state = 0
已注册

从 ini 文件中删除 MaxBuildDate=... 行,这样它就不会影响我们的进一步步骤。

下一步