客户端 PC 的 1 年后应用程序过期,客户端 PC 上没有互联网可用

expire application after 1 year span from client PC, No internet is available on client PC

我有一份 vb.net windows 申请,我想将其交付给我的客户,有效期为 1 年。

一年后本软件将自动停止运行或要求续订。

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

安装程序时,将其设置为当前日期的注册表值。然后,在每个后续程序启动时,让它根据当前时间检查该注册表值。如果已经超过一年,请按照您的计划锁定您的应用程序。

This postvb.net.

中有一些关于添加、修改和访问注册表值的细节的优秀信息

检查日期。

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

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

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

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

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

我需要为我编写的程序执行此操作。我的最终解决方案包括您不能 100% 万无一失的解决方案,因此我考虑了我的用户并尽我所能。

没有网络连接,电脑怎么知道现在是什么日期?它必须依赖于用户输入。因此,如果用户可以输入它,那么用户就可以更改它。没有万无一失的方法可以在用户无法访问 PC 的情况下从 PC 获取准确日期。是否来自OS、BIOS等

所以我最终做的是将一个混淆的密钥放入注册表中一个不起眼的地方。香港中文大学 >> 软件。我将密钥设为一些字母和数字 {L12A3C0DFF} 然后我将密钥命名为 Z0B0 并将值设为混淆日期。我通过不同的计算得到了年月日和 运行 中的每一个。我最终得到了看起来像 DDE011468932 的东西。

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

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

因此,为了让他们滥用一年的日期限制,他们不得不每天更改 BIOS 中的日期,我认为这对他们来说不值得,此外,他们将不得不弄清楚我从哪里开始获取日期,这需要反编译(而且我不会把它卖给一群程序员)。简单地更改 OS 中的日期是骗不了它的。