从客户端PC运行1年后到期申请,客户端PC上没有互联网

时间:2015-09-22 14:07:28

标签: sql sql-server vb.net desktop-application

我有一个vb.net Windows应用程序,我希望将其提供给我的客户,有效期为1年。

一年后,该软件将自动停止工作或要求续订。

客户端PC无法访问互联网。 请告诉我安全的方法。

4 个答案:

答案 0 :(得分:3)

安装程序后,请使用当前日期设置注册表值。然后,在每个后续程序启动时,让它检查该当前时间的注册表值。如果超过一年,请执行您计划锁定应用程序的任何操作。

This postvb.net中有关于添加,修改和访问注册表值的详细信息。

答案 1 :(得分:1)

检查日期。

If dateToday > dateProgramSold.AddYears(1) Then 
   'open form that cant be close saying program is expired
End If

答案 2 :(得分:0)

安装程序时,应该要求注册密钥(他们可以通过电子邮件获取,打印出来并输入)。密钥应包含有效期的最后一天(加密)。将密钥存储在注册表中(或其他位置)。程序启动时,检查密钥内的日期。

如果他们重新安装,结束日期将保持不变。

当他们想要更新时,只需通过电子邮件或邮件发送新密钥。

您投入的安全数量可能取决于您对公司的信任程度。因为他们总是可以反编译并破解你的软件。

答案 3 :(得分:0)

我需要为我编写的程序执行此操作。我的最终解决方案包括你可以100%万无一失的解决方案,所以我考虑了我的用户并尽我所能地做了我所拥有的。

如果无法访问互联网,计算机如何知道它的日期?它必须依靠用户输入。因此,如果用户可以输入它,则用户可以更改它。没有用户可以访问它,没有万无一失的方法可以从PC获得准确的日期。无论是来自OS,BIOS等等。

所以我最终做的是在一个不起眼的地方把一个混淆的密钥放到注册表中。 HKCU>>软件。我把密钥只写了一些字母和数字{L12A3C0DFF}然后我将密钥命名为Z0B0并将值设为模糊日期。我花了一年零五天的时间,通过不同的计算来运行每一年。我最终得到的东西看起来像DDE011468932。

每次程序运行时,它都会解码此注册表设置,以查看是否已根据BIOS中的时间过去了一年。如果BIOS中的日期早于这个日期,那么他们就改变了它,我不会允许我的程序运行。

每次程序运行时,我都会检查BIOS中的日期并以相同的方式将其存储在注册表中。所以我会检查他们是否将BIOS中的日期更改为更早的日期。

所以为了让他们滥用一年的日期限制,他们真的不得不每天更改BIOS中的日期,我认为这对他们来说是不值得的,此外,他们将不得不弄清楚我从哪里开始的日期,这将采取反编译(我不是卖给一群程序员)。简单地改变操作系统中的日期就不会愚弄它。