如何为我的 python 应用程序设置试用期?

Posted

技术标签:

【中文标题】如何为我的 python 应用程序设置试用期?【英文标题】:How to make trial period for my python application? 【发布时间】:2014-10-05 20:23:37 【问题描述】:

我在 kivy 中制作了一个桌面应用程序,并且能够使用 pyinstaller 制作单个可执行文件(.app)。现在想给客户试用期10天左右。 问题是如何制作一个在安装 10 天后停止工作的试用版,即使用户在试用期结束后卸载并重新安装它也不应该工作。 不能在试用版中提供部分功能。

环境 带有 Kivy 的 Mac OS 和 Python 2.7

【问题讨论】:

大多数商业软件都使用密钥,并且要求软件连接到互联网才能“打电话回家”并确保这些密钥有效。 你能推荐任何 MAC 安装程序,比如 Windows 的 inno 吗? 我真的不知道这样的事情。我只知道大多数软件公司都有后端和资金能够在内部或使用非常昂贵的第三方软件来处理这些事情。 还需要在硬盘中的某处写入/加密时间戳,顺便说一句,您可以使用硬件首选项作为常量来生成用于购买的公钥,相应地提供私钥。 【参考方案1】:

您需要一个网络服务器和一个数据库来完成这项工作。

在您的数据库中创建一个 licenses 表。 每次新客户为您的软件付费或要求试用时,您都会生成一个新的长随机许可证,将其插入许可证表中,将其与客户的电子邮件地址相关联并通过电子邮件发送给客户。 每次客户尝试在他们的计算机上安装软件时,您都要求获得许可证并联系网络服务器以确保许可证存在并且仍然有效。

使用它,人们仍然可以创建多封电子邮件,从而有可能获得无限数量的试用版。

然后,您可以尝试在该人的计算机中的某个位置添加一个文件,一个没人会寻找的位置,然后将旧许可证粘贴到那里,这样当应用程序再次启动时(即使是从新安装),它可以从那里阅读许可证并在不要求许可证的情况下联系网络服务器。使用这种方法,当您的应用程序联系带有过期试用许可证的服务器时,您的服务器可以回复“许可证过期”信号,让您的应用程序知道它现在必须请求非试用许可证,并且服务器应该只从现在开始接受来自该应用程序的非试用许可证。如果您的客户意识到您的应用正在从本地文件中获取此信息,则整个方法都会中断,因为他们可以在找到时将其删除。

想到的另一个想法是在创建许可证时将笔记本电脑的 MAC 地址(或您能想到的任何其他唯一标识符)关联到一个许可证而不是电子邮件地址时间(客户在要求试用时需要向您发送他的 MAC 地址)或安装时(您的应用可以检查运行它的笔记本电脑的 MAC 地址)。

【讨论】:

【参考方案2】:

1) 您可以在应用程序时间戳中硬编码后,它将停止工作并检查每次运行是否此时间戳大于 time.time()。如果您有一个或几个客户并且能够为每个客户制作具有不同日期的试用版,则此方法将起作用。

2) 使用平台/sdk 获取许可证,例如https://cryptolens.io/ 或其他

3)写你自己的解决方案,也许How to generate and validate a software license key?会帮助你

【讨论】:

【参考方案3】:

我的想法是

    在数据库中建表 使用 datetime 模块并将系统日期作为开始日期放入该表中 使用 timedelta 模块 timedelta(15)(用于计算程序需要过期的日期,我在代码中使用了 15 天试用期)并将其作为过期日期存储在数据库表中 现在,每次您的应用启动时都会设置此逻辑,它会检查当前日期是否与到期时间匹配,如果确实显示错误,则表明您的显式逻辑已到期

注意:- 确保开始和到期只运行一次,而不是一次又一次地更改日期。

【讨论】:

以上是关于如何为我的 python 应用程序设置试用期?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Android App 用户提供一次性购买应用程序的免费试用期?

如何为我的 C# 应用程序创建产品密钥?

如何为我的 API 和我的 websocket 设置路由

如何为我的应用正确设置最低 iOS 版本? [关闭]

如何为我的 VB.net 应用程序设置 Protobuf?

如何为 Linux 设置我的应用程序的桌面图标:KDE、Gnome 等?