◆需求:

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

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

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

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

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

5、控制方式不要太复杂

◆分析:

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

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

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

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

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

1

2

3

4

5

6

7

8

9

10

11

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

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

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

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

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

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

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

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

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

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

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

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

  6. Angular之简单的登录注册

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

  7. android mysql实现登录注册_android简单登陆和注册功能实现+SQLite数据库学习

    android简单登陆和注册功能实现+SQLite数据库学习 发布时间:2018-07-04 17:23, 浏览次数:1027 , 标签: android SQLite 这里我只是建立了一个用简单的存 ...

  8. 用HTML做一个简单的web登录页面,简单的JavaWeb注册登录案例

    简单的JavaWeb注册登录案例 1.注册页面register.html register 姓名: 电话: 邮箱: qq: 2.注册案例实现程序register.java /** * 注册案例实现程序 ...

  9. PHP+MySql+PDO实现简单登录、注册

    最近学习中要使用PHP+MySql实现简单登录注册,看了很多简单案例后发现,并没有人通过PDO实现简单登录注册,要么就是Mysql和MySqli实现,就算实现了意义也不大,js就可以做的事情,没必要放 ...

最新文章

  1. 斗争程序猿(三十八)——历史朝代大学(两)——我与数据库的故事
  2. GDI+中发生一般性错误
  3. webView loadData 中文乱码问题
  4. Springboot使用JPA框架对数据库实现增删改查(附详细代码)
  5. boost::intrusive::offset_ptr用法的测试程序
  6. 【Breadth-first Search 】785. Is Graph Bipartite?
  7. 【转】Android AlertDialog自定义布局
  8. Qt程序启动画面QSplashScreen
  9. C#算法 质因数 最大公约数与最小公倍数
  10. POJ 3237 Tree (树链拆分)
  11. 2017初赛普及c语言答案,NOIP2017初赛普及组C++试题
  12. IEEE会议文章接收后提交流程
  13. python计算偶数平方和_如何使用Python和Numpy计算r平方?
  14. 移动端设计的基础尺寸单位与转化
  15. 【前端探索】移动端H5生成截图海报的探索
  16. springboot+jpa+mysql Springboot+jpa+jdbc+sqlserver 使用时遇到的一系列的问题
  17. 计算机等级考试《二级Java语言程序设计》题库
  18. 嵌入式linux驱动-LCD液晶屏驱动
  19. 机器学习——贝叶斯算法(一)
  20. js导出图片添加水印

热门文章

  1. 【开源项目】Build your own X 构建自己的项目
  2. Verilog中使用inout如何编写以及仿真
  3. 旧手机安装Centos
  4. Http和Web Socket
  5. 【经典】一场游戏一场梦、其实你不懂我的心...,N多的英文翻唱歌词
  6. [IMX6Q][Android5.1]移植笔记 --- kernel停在Starting kernel 分析
  7. 路由重复注册Duplicate named routes
  8. java addslashes_php addslashes()函数的使用
  9. 11.Excel股票分析工具-短线-低开机会
  10. Sentinel-流量防卫兵