zoukankan
html css js c++ java
NET许可证及License
有时,我们需要为类或组件等添加许可。
而NET FCL为 我们提供了一些相关类的使用。
这些类都在System.ComponentModel命名空间下。
下面是简单的一个实现:
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
Microsoft.Win32;
using
System.Runtime.InteropServices;
using
System.ComponentModel;
/**/
/*
* Test by McJeremy&Xu
* url:
http://www.cnblogs.com/mcjeremy
*
*/
namespace
MyLicenseTest
{
/**/
/*
* License许可由License(许可证)、LicenseProvider(许可证提供器)、LicenseManager管理三部分组成
* 使用过程一般如下:
* 1、创建继承自License并实现其抽象属性LicenseKey的License类
* 2、创建继承自LicenseProvider并实现其抽象方法GetLicense的Provider类
* 3、在需要验证许可的类或组件(等)的构造方法中使用LicenseMangager的静态Validate或IsValid方法,其中
* Validate产生异常,而IsValid不产生
*/
class
Program
{
static
void
Main(
string
[] args)
{
try
{
MyLicenseTestClass mltc
=
new
MyLicenseTestClass();
Console.WriteLine(
"
MyLicenseTestClass被许可使用了!
"
);
}
catch
(LicenseException e)
{
Console.WriteLine(e.Message);
}
Console.ReadLine();
}
}
//
Step1:实现License类
public
class
SimpleRuntimeLicense : License
{
private
string
TypeCode;
public
override
string
LicenseKey
{
get
{
return
TypeCode; }
}
public
override
void
Dispose()
{
}
public
SimpleRuntimeLicense(Type type)
{
this
.TypeCode
=
type.GUID.ToString();
}
}
//
Step2:实现licenseProvider类,使用Provider设计模式
//
NET提供了LicFileLicenseProvider类,一般情况下,我们需要提供我们自己的Provider来实现Validate逻辑
public
class
SimpleRuntimeLicenseProvider : LicenseProvider
{
/**/
///
<summary>
///
///
</summary>
///
<param name="context">
验证上下文
</param>
///
<param name="type">
被验证对象类型
</param>
///
<param name="instance">
被验证对象实例
</param>
///
<param name="allowExceptions">
是否在验证没通过时抛出异常
</param>
///
<returns>
验证通过后的许可证
</returns>
public
override
License GetLicense(LicenseContext context, Type type,
object
instance,
bool
allowExceptions)
{
//
通过licenseUsageMode可以指定验证范围是在设计时还是运行时
if
(context.UsageMode
==
LicenseUsageMode.Runtime
||
context.UsageMode
==
LicenseUsageMode.Runtime)
{
RegistryKey rk
=
Registry.LocalMachine.OpenSubKey(
@"
SOFTWARE\NETLicenseTest
"
);
if
(
null
!=
rk)
{
try
{
string
lick
=
rk.GetValue(
"
SN
"
).ToString();
if
(
!
string
.IsNullOrEmpty(lick))
{
if
(
string
.Compare(lick, type.GUID.ToString(),
true
)
==
0
)
{
return
new
SimpleRuntimeLicense(type);
}
}
}
catch
{
//
设定没有许可证时的提供信息
throw
new
LicenseException(type, instance,
"
您没有许可证!无法运行!
"
);
}
}
}
return
null
;
}
}
//
Step3:在需要许可验证的类型中使用LicenseProvider和LicenseManager
[Guid(
"
7F46DB6D-98CD-4cb7-BA95-014F678B2375
"
)]
[LicenseProvider(
typeof
(SimpleRuntimeLicenseProvider))]
public
class
MyLicenseTestClass:IDisposable
{
License lic
=
null
;
public
MyLicenseTestClass()
{
lic
=
LicenseManager.Validate(
this
.GetType(),
this
);
//
LicenseManager.IsValid(
}
IDisposable 成员
#region
IDisposable 成员
private
bool
disposed
=
false
;
void
IDisposable.Dispose()
{
Dispose(
true
);
GC.SuppressFinalize(
this
);
}
public
void
Dispose(
bool
disposing)
{
if
(
!
disposed)
{
if
(disposing)
{
if
(
null
!=
lic)
{
lic.Dispose();
}
}
}
}
~
MyLicenseTestClass()
{
Dispose(
false
);
}
#endregion
}
}
<h3>
心静似高山流水不动,心清若巫峰雾气不沾。
</h3>
查看全文
相关阅读:
SpringMVC中的@Controller和@RequestMapping到底什么鬼?
String、StringBuffer和StringBulder
对spring的理解是什么?
Maven依赖解析
【Java框架型项目从入门到装逼】第一节 Spring框架 IOC的丧心病狂解说
python学习记录(二)安装python编辑器
python学习记录(一)安装python
C#.net ListView item 拖动排序实现方法
使用sql语句实现跨数据库获取信息
Asp.net弹出层并且有遮罩层
原文地址:https://www.cnblogs.com/McJeremy/p/1432913.html
最新文章
Linux 启动 进入单用户模式 其他用户无法连接
yum 只下载不安装
apache start stop
mysql netstat
pkill kill 看看自己是谁
linux pts tty
linux 本地编码如何解决乱码
C#的委托(Delegates in C#) part one 野峰
Microsoft.Jet.OLEDB.4.0 未注册! 野峰
对象引用与托管指针(object references and managed pointers) 野峰
热门文章
C#中的委托(Delegates in C#) part two 野峰
【书评】C#的权威参考书(The Definitive Reference) 野峰
IEnumerable & IEnumerator 野峰
arch硬盘grub2引导iso的安装
教你把网页甚至网站制作成chm,pdf,epud
ubuntu以及ubuntu类linux系统的运行级别的理解(关闭图形界面)
archlinux的大升级>>> 问题解决
google code的git客户端提交使用
linux与windows下的编码不一致的情况
git服务器的搭建(参考gitprobook)
Copyright © 2011-2022 走看看