◆需求:

公司一直以来对开发的产品都没有进行使用时间的控制,要么就是将日期限制写死在程序里面,每次都要编译新程序再发给客户,很不方便。于是公司让我写个模块,要求如下:

1、无论哪个新开发的程序只要调用这个模块就可以控制有效期

2、软件到期后需要我们提供有效的注册码软件才能继续使用

3、客户修改了电脑的时间或者将软件移动到其他电脑依然可以控制

4、如果用注册表的方式,不允许当客户知道注册表后,修改注册表还能继续使用的情况

5、控制方式不要太复杂

◆分析:

1、当时我的第一反应就是dll,于是我就用了dll的方法来做。

2、这个做一个注册机即可。

3、我开始是想用网络时间的验证方式,但是客户的电脑不一定联网,所以不能用网络时间的方式。

4、如果用注册表,重装系统或者拿到其他电脑软件还是无法控制,所以干脆不用注册表。

5、需要注册功能的软件只需要引用dll并修改Program.cs文件为如下即可,够简单吧

RegDLL.RegClass reg = new RegDLL.RegClass(System.IO.File.GetLastWriteTime(System.Reflection.Assembly.GetAssembly(typeof(Form1)).Location).ToShortDateString());
if (reg.MiStart_Infos() && reg.MiEnd_Infos())
{Application.EnableVisualStyles();//Application.SetCompatibleTextRenderingDefault(true);//这句要注释掉,因为一个程序里面只能出现一句,dll里面已经有一句了,所以这里要注释Application.Run(new Form1());
}
else
{Application.Exit();
}

实现的思路:

其实也挺简单,我用两个文件分别来记录软件注册的时间(下面提到的秘密文件)及到期的时间(下面提到的注册文件),这两个文件用记事本即可,文件强制作为软件的必要文件,缺少则无法运行软件,当然为了更加安全可以加密文件,不过我这里没有做。

dll模块实现的功能如下:

一、检查秘密文件是否存在(Eng.k)
1.存在,则读取密文,密文为空则将程序的编译日期写入(调用此模块后软件第一次运行需要注册一次)
2.密文不为空则跟当前电脑时间对比,验证电脑时间的有效性,有效则将电脑时间写入秘密文件

3.这里的时间有效性就是说电脑的时间不能小于软件注册的时间,里面做了验证

二、检查注册文件是否存在(Engi.p)
1.存在,则读取密文中的软件有效期
2.如果密文有效期为空并且秘密文件信息正确,则生成注册码,并写入有效日期

3.接着比较当前日期是否处在两个文件的日期当中,是则软件有效,否则软件的注册码无效,需要重新注册有效的注册码

三、注册机的实现

1.当然就是根据日期生成注册码咯

2.把注册码发给客户注册,至于是否有效就是dll要做的事情啦

四、这种方式有个漏洞,若客户知道注册的原理,聪明点的就可以破解了,所以肯定不能透露O(∩_∩)O~

◆源码

源码自我感觉写得不够漂亮,这里我就不提供了,不过提供我的dll文件、注册机及示例项目的下载地址:http://files.cnblogs.com/linyc/REGDLL.rar

Ps:想看源码可以用反编译软件,看了源码就知道只是用了点"小伎俩"而已,欢迎大家反编译哈~有什么好的建议欢迎狠狠提出来交流哈~

声明:本软件只作为交流技术使用,不可作为商业用途,如因此引起的法律问题及其他责任本人概不负责。

转载请注明出处:http://www.cnblogs.com/linyc/archive/2011/03/26/1996397.html

转载于:https://www.cnblogs.com/linyc/archive/2011/03/26/1996397.html

C# 简单软件有效期注册的实现【原】相关推荐

  1. C# 简单软件有效期注册的实现

    ◆需求: 公司一直以来对开发的产品都没有进行使用时间的控制,要么就是将日期限制写死在程序里面,每次都要编译新程序再发给客户,很不方便.于是公司让我写个模块,要求如下: 1.无论哪个新开发的程序只要调用 ...

  2. 怎样把本软件是否注册的标志加在程序里?(注:不想加在数据库里)

    怎样把本软件是否注册的标志加在程序里?(注:不想加在数据库里) Delphi / Windows SDK/API http://www.delphi2007.net/DelphiDB/html/del ...

  3. 针对WM6.5系统和软件的注册表修改以及优化

    针对WM6.5系统和软件的注册表修改以及优化 2011年04月12日 手机上修改Windows?Phone注册表的软件(如果手机上已经有注册表修改软件就没必要下载了): 以下针对系统 手机上使用注册表 ...

  4. WM6.5系统和软件的注册表修改以及优化

    WM6.5系统和软件的注册表修改以及优化 手机上使用注册表编辑器修改一下键值: 注册表解锁: HKEY_LOCAL_MACHINE\Security\Policies\Policies 0000100 ...

  5. 基于android校园订餐APP,简单实现登录注册功能(SharedPreferences)

    基于android校园订餐APP,简单实现登录注册功能(SharedPreferences) 欢迎浏览本篇文章 界面效果图 页面设计代码 源代码 欢迎浏览本篇文章 大家好! 这是小编首次在博客上写的文 ...

  6. 画原画用什么软件比较好?画原画需要哪些工具?

    一 原画软件是一种术,原画设计是一种道,道术合一,才是无敌. 很多小伙伴喜欢问我这么一个问题,学原画要不要掌握原画软件,掌握了原画软件就意味着我能很好的玩转原画了嘛?我想说的是,如果你想学原画,那么掌 ...

  7. Android studio连接MySQL并完成简单的登录注册功能

    近期需要完成一个Android项目,那先从与数据库交互最简单的登陆注册开始吧,现记录过程如下: 此篇文章的小demo主要涉及数据库的连接,以及相应信息的查找与插入. 我已将源码上传至GitHub: h ...

  8. SpringCloud一代组件+nginx实现简单的登录注册

    SpringCloud一代组件+Nginx实现简单的登录注册 1.要求 2.实现步骤 1. 首先将项目骨架创建出来 2.然后将每个功能对应的子项目创建出来 3.导入对应的数据库和配置全局配置 4.配置 ...

  9. Angular之简单的登录注册

    使用Angular实现了一个简单的登录注册的功能........ 涉及到的Angular知识点很少 主要是这个功能的实现...(*^__^*) 嘻嘻-- 里面涉及到的知识点记录: 1.本地存储的操作 ...

最新文章

  1. Tesseract-OCR 3.04简单使用举例(读入图像输出识别结果)
  2. Linux 线程与进程,以及通信
  3. 如何在Linux使用Eclipse + CDT开发C/C++程序?
  4. python模块批量安装方法_python离线批量安装依赖包
  5. python学习笔记四一列表元组字典等
  6. C# 汉字转拼音(全拼)
  7. 翻译:用户变量(User-Defined Variable)(已提交到MariaDB官方手册)
  8. medit 和 .mesh 文件
  9. Arturia Pigments for Mac - 虚拟振荡合成器
  10. day20线程Thread的sleep方法
  11. parse Json
  12. APP性能测试-FPS测试
  13. centos双网卡不能同时工作解决
  14. matlab 平方根法解方程组,matlab改进平方根法
  15. 传奇服务器端地图链接在哪个文件夹,传奇服务端目录文件详细说明
  16. golang:goredis库pipeline使用方式
  17. 1.23英文题面翻译
  18. 朱棣文2009年哈佛大学演讲:未来并非在劫难逃
  19. python for 无限循环
  20. TI芯片(335x、437x、572x)uboot设置logo居中

热门文章

  1. 【转载】你真的了解补码吗
  2. BZOJ 2037 Sue的小球
  3. mysql创建utf-8字符集数据库
  4. Android 资源保护问题——探索
  5. echop红包发放规则添加
  6. React Native——react-navigation的使用
  7. AMAB interconnector PL301(二)
  8. memcached简介(转)
  9. 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之用户管理(1)...
  10. MSP430学习笔记