授予组件和控件许可权限

本随笔主要参考了MSDN

一、简单的一个例子

To enable licensing for your component or control

1、Apply a LicenseProviderAttribute to the class.

给类添加  LicenseProviderAttribute 特性。

2、Call Validate or IsValid in the constructor.

在构造函数中调用Validate函数。

3、Call Dispose on any granted license in the finalizer of the class or before the finalizer is called.

重写Dispose函数。

The following code examples use the built-in license provider class LicFileLicenseProvider, which enables you to use text license files.

using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace TestLicense
{
    // Adds the LicenseProviderAttribute to the control.
    [LicenseProvider(typeof(LicFileLicenseProvider))]
    public class MyControl : Control
    {
        // Creates a new, null license.
        private License license = null;

        public MyControl()
        {
            // Adds Validate to the control‘s constructor.
            license = LicenseManager.Validate(typeof(MyControl), this);

            // Insert code to perform other instance creation tasks here.
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (license != null)
                {
                    license.Dispose();
                    license = null;
                }
            }
        }

    }  

}

客户端代码如下:

namespace testIt
{
    class Program
    {
        static void Main(string[] args)
        {
            MyControl myControl = new MyControl();
            Console.WriteLine(myControl.ToString());
        }
    }
}

程序执行目录下如果有TestLicense.MyControl.lic 文件。且内容为:

TestLicense.MyControl is a licensed component.

则,该组件可以正常使用。

二、实践一下,自己动手写一下

主要是重写了读取证书文件内容和验证是否符合授权的方法。

namespace Test
{
    // Adds the LicenseProviderAttribute to the control.
    [LicenseProvider(typeof(LicFileLicenseProvider))]
    public class MyControl : Control
    {
        // Creates a new, null license.
        private License license = null;

        public MyControl()
        {
            // Adds Validate to the control‘s constructor.
            license = LicenseManager.Validate(typeof(MyControl), this);

            // Insert code to perform other instance creation tasks here.
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (license != null)
                {
                    license.Dispose();
                    license = null;
                }
            }
        }

    }
}

namespace Test
{

    public class MyLicense : License
    {
        public override string LicenseKey
        {
            get
            {
                return "Tukrin";
            }
        }

        public override void Dispose()
        {

        }
    }

    public class TukrinLicFileLicenseProvider : LicFileLicenseProvider
    {

        public override License GetLicense(LicenseContext context, Type type, object instance, bool allowExceptions)
        {
            if (IsKeyValid(GetKey(null), null))
            {
                return new MyLicense();
            }
            else
            {
                return null;
            }

        }

        protected override string GetKey(Type type)
        {
            try
            {
                FileStream fs = File.OpenRead(Application.StartupPath + "\\license.lic");
                StreamReader sr = new StreamReader(fs);
                string all = sr.ReadToEnd();
                return all;

            }
            catch (Exception)
            {

                return null;
            }
        }
        protected override bool IsKeyValid(string key, Type type)
        {
            try
            {
                if (key.Contains("Tukrin"))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception)
            {

                return false;
            }

        }
    }
}

好的参考链接:

如何:授予组件和控件许可权限

LicFileLicenseProvider类

时间: 2024-12-22 06:24:56

授予组件和控件许可权限的相关文章

ASP.NET列表生成组件DbNetList控件下载及介绍

DbNetList是一个综合功能的列表选择组件,作为动态HTML(DHTML)实现.运用DbNetList,你可以快速为自己的web页面添加数据库驱动的列表.下拉式列表(drop-down).树型和复选框列表.DbNetList兼容最流行的各种数据库服务器,包括:SQL Server.Oracle和Informix. 具体功能: 生成列表.多列列表.下拉式列表(drop-down).树型列表.复选框列表... 提供ASP 和 ASP.NET的本地版本. 基于浏览器.无论何处均可设计和运行.无需客

组件、控件和插件的区别

组件.插件.控件的区别 控件:是编程中用到的,按钮就算是一个控件,窗口也是等等 组件:是软件的一部分.软件的组成部分. 插件:网页中用到的,flash插件,没有它浏览器不能播放flash. 首先范围最广的应该是组件,英文component,提起组件我们不应该把他和具体的技术,什么dll文件,ocx控件,activex等等联系起来,因为组件仅仅是一个概念,如果非要解释的话,那就是凡是在软件开发中用到了软件的复用,被复用的部分都可以称为组件.构件的英文也是component,所以说构件和组件其实是一

区别API、框架、插件、组件、控件等

区别API.框架.插件.组件.控件等 一.API 1.概念 提供给不同语言的一个接口,也就是在对应的函数内提供相应的方法(控制Windows各个部件的外观和行为的一套预先定义的Windows函数),只要用js语法调用想要的功能.例,js内BOM的screen方法. 2.目的 对底层的封装,将一些不会变化的东西封装一下,可以提高开发效率. 3.API理解 JS的api有很多的功能,只要知道有这样的东西,到时候直接去网上找调用的方法就可以了.例,百度地图的API. 二.框架 1.概念 js框架就是将

无边框窗体和用户控件以及权限

无边框窗体: 就是吧窗体的边框去掉,然后自己做按钮设置功能. 无边框窗体的移动: 将下面代码直接复制粘贴,将窗体的鼠标按下事件的方法改成下面方法的名字就可以直接使用 1 //窗体移动API 2 [DllImport("user32.dll")] 3 public static extern bool ReleaseCapture(); 4 [DllImport("user32.dll")] 5 public static extern bool SendMessag

web组件-日历控件

<input type="text" id="calendar" readonly/> <div class="mod dn" id="mod"> <div class="hd"> <button class="prev_year" id="prev_year"><<</button> <b

组件用户控件引用样式资源(二)---代码引用

关于样式文件引用方式存在以下弊端(摘自官方) When you reference a ResourceDictionary in XAML, a ResourceDictionary object is created each time you reference it.  So if you have 10 custom controls in your library and merge the shared ResourceDictionaries for each control b

[Vue]组件——将控件的原生事件绑定到组件

1.方法1:.native修饰符 1.1.native修饰符:将原生事件绑定到组件的根元素上 <base-input v-on:focus.native="onFocus"></base-input> 1.2缺点: 如以下根元素实际上是一个 <label> 元素时,原生事件不能被绑定到input事件上: <label> {{ label }} <input v-bind="$attrs" v-bind:value

iOS:UIView视图与组件控件

一.UIView常见属性 (1)@property(nonatomic,readonly)UIView *superview; //获取自己的父控件对象 (2)@property(nonatomic,readonly,copy)UIView *subviews;//获取自己的所有子控件对象 (3)@property(nonatomic)NSInteger tag;//控件的ID标识,父控件可以通过tag来找到对应的子控件,默认为0 (4)@property(nonatomic) CGRect f

Objective-c:UIView视图与组件控件

一.UIView常见属性 (1)@property(nonatomic,readonly)UIView *superview; //获取自己的父控件对象 (2)@property(nonatomic,readonly,copy)UIView *subviews;//获取自己的所有子控件对象 (3)@property(nonatomic)NSInteger tag;//控件的ID标识,父控件可以通过tag来找到对应的子控件,默认为0 (4)@property(nonatomic) CGRect f