有时,我们需要为类或组件等添加许可。

而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
    }
}

转载于:https://www.cnblogs.com/McJeremy/archive/2009/04/10/1432913.html

NET许可证及License相关推荐

  1. 达索CATIA许可证(License)管理使用和优化,解决许可不够用

    现下主流的CATIA-V6版本,使用的是达索公司提供授权的浮动License. 类似于CATIA浮动型License的特点是License并不属于个别用户,所有用户都可以使用许可,用后即还,软件并发用 ...

  2. Unity 许可证 激活 License Error 无效

    简介: 在使用Unity的时候,Personal版本可以使用Unity的大部分功能,在小规模开发的时候,已经完全足够,对于定制Unity游戏启动画面的Unity图标(破解版除外),或者是需要游戏性能指 ...

  3. LMT LicManager系统对许可证(license)管理创新中的新附加值

    LMTLicManager系统对license管理创新中的新附加值 在当下,对软件license授权技术是软件作者通过自己采用的某种技术手段来实现软件的按授权license使用,license内容包括 ...

  4. 许可证( License LicenseLicenseLicenseLicenseLicense)服务器配置

    在这里我要说明一下,如果你没有lic文件,可以到官方注册帐号,进行申请,我这里我申请的是一个90天的试用的序列号,下面是我在配置过程中的一些截图发出来.大家可以看一下. 老样子,开机过几秒中会提示出来 ...

  5. 开源软件的许可证(License)

    开源软件的Licenses有很多(http://opensource.org/licenses),在免费提供代码的前提下,对于使用者的"回报"有三种: 只求认可.即只要使用者在使用 ...

  6. 常见版权协议介绍,什么的License许可证,eula,开源协议

    LISENCE(许可证),一般在软件.项目.文件的目录里,指此软件使用哪个许可证,也代表了我们应该怎么使用软件 License的许可证的协议有很多种,比如常见的Apache许可证 Apache Lic ...

  7. 使用.NET REACTOR制作软件许可证

    使用.NET REACTOR制作软件许可证 原文:使用.NET REACTOR制作软件许可证 软件下载地址:http://www.eziriz.com/downloads.htm 做一个简单的许可证系 ...

  8. gpl可以商用吗_一文看懂开源许可证,能不能商用再也不抓瞎

    在github中闲逛,宝藏多福利好.不过心里或许总有小忐忑,这么多开源项目,我的产品里能不能用呀! 其实想知道项目能不能用看下项目的开源许可证就清楚了(即使是非软件产品比如数据.媒体.资料等也可以通过 ...

  9. OSI 认证的开源 License 有哪些?

    目录 介绍 受欢迎且被广泛使用或具有强大社区的许可证 国际许可证 特殊用途许可证 其它许可证 与更流行的许可证重复的许可证 不可重复使用的许可证 被取代的许可证 自愿退休的许可证 未分类的许可证 参考 ...

最新文章

  1. Flash/Flex学习笔记(4):如何打开网页及Get/Post数据
  2. 小程序分享朋友圈之填坑模式
  3. c strlen C++ strlen
  4. 为什么不推荐正沿+lockup+负沿的scan chain?
  5. [NOTE] WindowsLinux常用环境变量
  6. .NET CORE MYSQL 微信小程序 HTTPS 随笔
  7. PAT1001. 害死人不偿命的(3n+1)猜想
  8. eclipse和idea开发servlet的区别
  9. 走过 Google 2005年[zt]
  10. Java对象使用的重要细节
  11. GD32F103读写内部FLASH
  12. 用易语言开发的ffmpeg转码工具
  13. C#批量转换Word文档为Pdf
  14. 超频到3200最佳时序_攒啥电脑呢?笔记本内存也要超频?
  15. 我母亲在一家计算机公司工作,我的母亲作文
  16. Day101.MyBatisPlus(MP):自动填充、乐观锁、分页、逻辑删除、Wrapper条件构造器
  17. 如何倒出2两酒(5)
  18. HTML5 混合APP开发学习笔记(三)——CSS样式设计
  19. android SurfaceView + Camera全屏自适应屏幕尺寸
  20. 2022年武汉安全员ABC证评分标准?多少分及格呢?甘建二

热门文章

  1. mysql generic安装_MySQL 5.6 Generic Binary安装与配置
  2. 神策数据王灼洲 徐缓:ID-Mapping 用户打通那些事儿
  3. 校宝在线携手神策数据 数据赋能产品服务体验双升级
  4. 中奖名单 | 价值 199 的大数据平台研发课程幸运er
  5. Spark Streaming初步使用以及工作原理详解
  6. 什么是流量劫持,如何防止流量劫持?
  7. OpenCV基础篇之读取显示图片
  8. Ubuntu常用APT命令参数
  9. socket下server端支持多客户端并发访问简单实现
  10. 如何确定Oracle是32 Bit(位)的还是64 Bit(位)的?