C# 如何将我的产品作为试用版制作30天?

C# 如何将我的产品作为试用版制作30天?,c#,security,installation,trialware,C#,Security,Installation,Trialware,我已经创建了我的产品,并为此生成了许可证密钥,但我想在30天后询问该密钥。我用注册表值存储日期,并在其中添加30天。但是我发现如果用户在我的逻辑失效前30天更改系统日期 那么,对于试用版软件,有没有不检查系统日期、只允许30天试用的解决方案?您需要有一种方法来检测用户是否更改了您首次开始试用的日期。在我以前使用过的解决方案中,我们保存了“最后执行”日期和“第一次执行”日期,如果时钟更改为“最后执行”两天以上,我们将终止试用。您还需要一个“days executed”(执行天数)计数器,这样他们就

我已经创建了我的产品,并为此生成了许可证密钥,但我想在30天后询问该密钥。我用注册表值存储日期,并在其中添加30天。但是我发现如果用户在我的逻辑失效前30天更改系统日期


那么,对于试用版软件,有没有不检查系统日期、只允许30天试用的解决方案?

您需要有一种方法来检测用户是否更改了您首次开始试用的日期。在我以前使用过的解决方案中,我们保存了“最后执行”日期和“第一次执行”日期,如果时钟更改为“最后执行”两天以上,我们将终止试用。您还需要一个“days executed”(执行天数)计数器,这样他们就不能将日期向后移动两天(忘记提到这一部分)-每次执行时计数器都会递增


当然,通过卸载和重新安装并适当刷新注册表,这样的软件许可证系统总是可以避免的-诀窍是混淆和复制您的许可证信息,使之变得足够困难,但最终,它会被发现(特别是如果您使用的是未混淆的.NET代码库).

您可以使用许可组件。您可以自己制作一个(请参见),也可以从供应商处购买一个(例如)。

您可以拥有另一个注册表项,每天使用后可以增加该注册表项的数量。这样,即使他们更改了计算机的日期,此键也会向您的程序指示它已运行了>30天

此外,可以对该值进行加密,以便如果用户试图手动更改它,程序可以拒绝运行,因为它无法解密该值并从中获取有效数字

为了避免重新安装,您可以向应用程序试用版保存的任何文件中添加一些信息,这些信息对于特定版本的应用程序是唯一的(可能是安装时的时间戳)。当应用程序的试用版尝试打开文件时,它将检查此签名并确保该签名是使用同一实例创建的,否则拒绝打开该文件。这本质上削弱了重新安装应用程序并继续使用它的能力


然而,在一天结束时,用户完全可以控制他们的机器,并且可能可以找到一种方法来绕过你想做的任何事情(除了访问在你允许用户使用应用程序之前保存这些详细信息的web服务)。你可能不应该花费太多精力去阻止那些愿意经历这些额外麻烦的人,而应该花这些额外的时间/金钱/精力来为那些愿意付费的人改进应用程序。

如果不考虑系统日期/时钟,30天是很难处理的。你可以随时保留应用程序启动日期的列表,每次与上次不同时,都可以计算1。这样,用户每次启动应用程序时都必须设置相同的日期

除此之外,如果可以访问internet,您可以查询已知的良好时间服务器以获取当前日期。这可以通过断开连接来避免,但在应用程序启动之前,您始终可以要求连接互联网


最后,通过硬件加密狗或类似工具提供外部本地时间源,但我认为您正进入极限,最好亲自直接管理试验。

如果您可以保证互联网连接,您可以实施在线方案(检查时间服务器或您自己的身份验证服务器)。当然,这带来了另一种依赖——如果互联网消失,你的用户就无法工作


最终,我会说,购买第三方许可解决方案——它仍然不是牢不可破的,但它可能比你自己不用花很多时间和精力就能做的事情更强大

存储上次运行日期,并且每当系统日期在该日期之前,都会使试用版过期

唯一的故障保护方法是根据您托管的服务验证应用程序,假设没有人破解您的连接代码;)


只要他们可以清除注册表值/隔离存储文件/保存的设置:他们就可以重新启动试用版。对此你无能为力。这就是为什么除了基于时间的试用期外,人们选择试用软件中的功能减少。

我有一个简单的解决方案供您选择

为注册表获取2个变量: 1.日期 2.柜台

步骤:

  • 设置计数器=1

  • 将系统日期复制到当前日期

  • 每次检查日期是否与当前日期不同,并将该日期复制到注册表日期,同时将计数器增加1。如果日期相同,不要做任何事

  • 现在,您可以检查您的柜台试用期到期

  • 通过使用这些技巧,如果用户将系统日期更改为上一个日期,那么它也可以工作

    对于注册表,您可以加密日期和计数器,以便技术人员不会识别您的逻辑

    干杯

    已添加

    只有当用户不更改每天的日期时,此逻辑才会失败!我们又有了解决办法

    我不知道这是否可能,但您总是可以找到一些解决方案:

  • 计算试用期的总时间并将其存储在注册表中
  • 现在计算每次运行的总时间,并将其添加到另一个变量中。(我希望可以用定时器完成)
  • 比较以上两个值以决定是否过期

  • 如果允许8小时试用(而不是30天试用)是可以接受的,那么消除对系统DateTime依赖的一种方法是在应用程序中使用计时器,该计时器每分钟启动一次。计算这些,因此每次应用程序运行时,它都会累积总使用分钟数。然后,您可以将此计数值存储在某个位置,例如