当前位置: 首页 > news >正文

.Net开发笔记(二十)创建一个需要授权的第三方组件

在使用需要授权的软件时,注册付费的目标是软件的使用者,我们开发人员平时用到的一些第三方组件也是需要授权付费的,也就是说,付费者是开发人员,并不是系统(使用了该第三方组件)的最终使用者。

以上两者的区别如下图:

图1

本篇文章介绍.net中怎样开发需要授权的第三方控件(组件),既然授权对象是开发者,不是最终用户,那么授权入口只能提供给开发人员,而不应该提供给最终用户。另外,一般情况下,组件的一次成功授权只能供一个开发人员使用,因此授权信息需要跟开发人员的电脑绑定,这个可以通过关联机器硬件编码来做到。软件开发完成发布后,第三方组件不应该影响用户的使用,也就是说,发布后的组件,不能再绑定到具体电脑。总结一下,大概包含以下几点:

  • 组件的授权收费是针对使用该组件开发软件的人;
  • 组件的授权跟机器绑定,一次成功的授权只能供一个开发人员使用;
  • 软件发布后,组件不能再影响最终用户,第三方组件的授权入口对最终用户透明。

要解决以上三点,需要知道很重要的一个概念就是之前系列博客中介绍的“设计时(Design-Time)”和“运行时(Run-Time)”,以及明白它两的区别和联系。

由前面系列博客得知:

任何一个组件有两种状态,即“设计时”和“运行时”,简单之,组件处在窗体设计器中时,它就处于“设计时”;反之,程序跑起来后,组件就处于“运行时”。同一个组件,处于设计时的行为和处于运行时的行为可能不一样,这就像同一个人,在他老爸面前和在他儿子面前的行为可能不一样。用一个简洁的代码展示如下:

  View Code

如上代码所示,软件开发阶段,开发人员使用第三方组件,需要在窗体设计器中实例化一个组件实例,那么这时候就可以检查组件在当前机器上的授权状态(已授权、试用期还是已过期),这时候检查授权状态需要和当前机器硬件信息关联。软件发布后,组件不再在窗体设计器中,同时组件面向的是最终用户,理论上不应该再检查组件的授权状态,但是为了防止开发人员使用试用期的组件发布了软件,因此在组件发布后,还是有必要检查一下组件的授权状态,这时候检查方式就不用与硬件信息关联了。

本篇Demo中做了一个等待控件,我们在使用它进行开发的时候需要取得授权许可,授权时根据生成的申请码(跟本机硬盘编号关联),去匹配组件开发商提供的激活码,两者一致的话,授权成功,否则提供30天的试用期,在试用阶段,界面显示试用标志,30天试用结束后,组件不能再继续试用。如果需要发布,则需要调用组件对应的方法,给它提供一个申请码和一个激活码,授权成功,组件正常使用,授权不成功,组件显示未授权标志(但不要求最终用户获得授权)。

判断组件当前状态方法:

  View Code

发布后,提供申请码和激活码激活组件:

  View Code

注:本文主要讲述第三方组件授权原理,其余有关授权方式是否安全等有待完善。

Demo项目结构:

图2

效果图:

1)开发阶段,组件授权界面

图3

2)开发阶段,ProgressBar试用期

图4

3)发布后,未授权的ProgressBar

图5

4)开发阶段,授权成功

图6

源码下载地址:http://files.cnblogs.com/xiaozhi_5638/ComponentCopyProtection.rar

希望有帮助!

 

作者:周见智 
出处:http://www.cnblogs.com/xiaozhi_5638/ 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

分类:  Windows Forms, 非主流玩一玩
标签:  c#

本文转自周见智博客博客园博客,原文链接:http://www.cnblogs.com/xiaozhi_5638/p/3484299.html,如需转载请自行联系原作者

相关文章:

  • 2015年热门的国产开源软件TOP 50
  • java基础面试题
  • 智能手机:“单兵作战”已死,多元化营销永生
  • mac修复ab及siege安装
  • 7 -- Spring的基本用法 -- 12... Spring 3.0 提供的表达式语言(SpEL)
  • 每日阅读
  • win 下 apache 实现负载均衡
  • PHP下ajax跨域的解决方案之jsonp
  • nginx反向代理架构与安装配置(一)
  • 几个有意思的linux命令
  • 2017年计划学习点 Kotlin
  • 很好的求幂的题目
  • tensorflow linear_regression 实例解析
  • 微信公众号支付接口网页开发示例
  • kisso
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • download使用浅析
  • iOS编译提示和导航提示
  • java概述
  • Java教程_软件开发基础
  • jdbc就是这么简单
  • js
  • Logstash 参考指南(目录)
  • Node + FFmpeg 实现Canvas动画导出视频
  • PHP面试之三:MySQL数据库
  • Selenium实战教程系列(二)---元素定位
  • vue学习系列(二)vue-cli
  • 关于字符编码你应该知道的事情
  • 免费小说阅读小程序
  • 提醒我喝水chrome插件开发指南
  • 我建了一个叫Hello World的项目
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • - 转 Ext2.0 form使用实例
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • #etcd#安装时出错
  • #vue3 实现前端下载excel文件模板功能
  • #微信小程序:微信小程序常见的配置传旨
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • @JsonFormat与@DateTimeFormat注解的使用
  • @RestControllerAdvice异常统一处理类失效原因
  • @取消转义
  • [ Linux ] Linux信号概述 信号的产生
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [ai笔记3] ai春晚观后感-谈谈ai与艺术
  • [Android] 240204批量生成联系人,短信,通话记录的APK
  • [C#7] 1.Tuples(元组)
  • [CareerCup] 12.3 Test Move Method in a Chess Game 测试象棋游戏中的移动方法
  • [CISCN2019 华北赛区 Day1 Web5]CyberPunk --不会编程的崽
  • [Codeforces] combinatorics (R1600) Part.2