我必须在客户端PC上的某处存储一个演示安装date。 应用程序演示期限是在安装date计算的。 显然用户不可能编辑或删除这个值。
如何才能做到这一点 ?
一个解决scheme将连接到服务器,并在那里validation,但这将意味着互联网连接是必需的,其中,..吮..
你可以用日期创建一个简单的文件,连同一些机器的具体信息并签名。
规则是:如果文件存在且签名有效,环境是正确的,日期仍然是未来,那么演示将开始。
这样可以防止更改文件或使用不同机器上的文件。 它不包括问题,可能会更改系统日期…
关于您的问题 – 如果许可证文件丢失,软件将无法启动。 而用户不能创建许可证文件,他会从你那里得到(你需要签名 – 只有签名是正确的,使用才能验证)。 您可能会要求他提供一个MAC地址,将该地址添加到许可证文件中,以确保许可证文件不能在另一台机器上使用。
而关于卸载 – 用户可以保留它 – 在演示期结束后的一天,这将毫无价值。
如果你想要的东西满足'用户不可能编辑或删除这个值'。 比你不能把它存储在用户的机器上。
因此,有了这个要求,您只能将其存储在远程机器上,并通过某种网络连接访问它。
实现您的目标的另一个可能的解决方案将是使用非对称加密。 在安装过程中,您需要从您自己的服务器(基于来自客户端计算机的标识信息,日期等)签名签名,然后将其存储在客户端计算机上并使用公钥进行解密。 在这种情况下,您只需要安装互联网连接。
我可能会选择两种可能性之一:
在EXE中强制使用“仅用于”日期,以便EXE的所有副本在给定日期后都将停止工作。 当然,那么你可能不得不每隔一段时间上传一个新的EXE。 根据你的情况,这可能是一个足够好的解决方案。
Andreas_D建议的一个变种:在安装时,创建一个二进制文件,其中包含大量的膨胀和安装日期。 这很容易实现。 普通用户永远不能使用十六进制编辑器(不会少于记事本,这会破坏文件,将其视为ANSI或UTF-8或纯文本文件)更新此类文件中的日期。 用户当然可以删除文件,但是如果没有这个文件,你的应用程序将不会启动,而且日期在正确的范围内。
当然,这些方法中没有一个对系统的日期修改是安全的,但是很少有用户想要用不正确的日期运行他们的主计算机。 (另外,许多应用程序不能使用不正确的日期。)