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>
查看全文
相关阅读:
显示AVI的第一桢
视频采集,存成avi
视频捕获
如何将Wav文件做到EXE文件里
图形整体拉出效果
3.2 指数型生成函数
3.1 普通型生成函数
诡异的楼梯 HDU
A strange lift HDU
胜利大逃亡 HDU
原文地址:https://www.cnblogs.com/McJeremy/p/1432913.html
最新文章
ES6拷贝方法
chrome插件2
chrom插件1
express做登录判断
cookie Web Storage API
Centos7服务器启动jar包项目最佳方式
SpringCloud文章
SpringCloud-Zuul搭建
Java 批量反编译class文件,并保持目录结构
传智播客Springmvc_mybatis学习笔记
热门文章
centos6.7安装tomcat
springboot+swagger2
图像卷积与反卷积(后卷积,转置卷积)
eclipse创建springmvc项目
大数据相关
播放背景音乐
循环播放音乐
全屏幕显示AVI
把AVI存在资源中用TAnimate播放
播放一个wav文件
Copyright © 2011-2022 走看看