次の方法で共有


コンポーネントおよびコントロールのライセンス処理

.NET Framework には、すべてのコンポーネント (Windows フォーム コントロールや ASP.NET サーバー コントロールを含む) について同一のライセンス処理モデルが用意されています。このライセンス処理モデルは、Microsoft ActiveX® コントロールのライセンス処理と完全な互換性があります。

ライセンス処理を行うことで、コントロール作成者は、ユーザーがそのコントロールの使用権を許可されているかどうかを確認することにより、知的財産権の保護に役立てることができます。この確認は実行時よりも、コントロールがアプリケーションに組み込まれるデザイン時に、より重要になります。ライセンスが許可されたコントロールがデザイン時に合法的に使用される場合 (これ以外の方法では使用できません)、アプリケーションには自由な配布を許可するランタイム ライセンスが付与されます。

このライセンス処理モデルでは、コンポーネントやコントロールから検証ロジックを分離することにより、その他のさまざまなレベルでのライセンス処理サポートも可能にします。ライセンスの許可および検証ロジックは、ライセンス プロバイダによって実行されます。ライセンス プロバイダは、System.ComponentModel.LicenseProvider から派生したクラスです。ライセンス処理を有効にするためにコンポーネント作成者が行う必要がある手続きは簡単です。

作成したコンポーネントに対するライセンス処理を有効にするには

  1. クラスに LicenseProviderAttribute を適用します。
  2. コンストラクタで LicenseManager.Validate または LicenseManager.IsValid を呼び出します。
  3. クラスの終了処理で、または終了処理を呼び出す前に、許可したすべてのライセンスに対して Dispose を呼び出します。

単純なライセンス処理を実装する Windows フォーム コントロールの例を次に示します。

using System;
using System.ComponentModel;
using System.Windows.Forms;
public class MyControl : Control {
    private License license = null;
    public MyControl () {
        license = LicenseManager.Validate(typeof(MyControl), this);
    }
    protected override void Dispose(bool disposing) {      
       if (disposing) {
          if (license != null) {
            license.Dispose();
            license = null;
          }
       }
      base.Dispose(disposing);
    }
    ~MyControl() {
        Dispose();
    }
}
[Visual Basic]
Imports System
Imports System.ComponentModel
Imports System.Web.UI

<LicenseProvider(GetType(LicFileLicenseProvider))> Public Class  MyControl 
Inherits Control
    Private license As License
    
    Public Sub New()
        license = LicenseManager.Validate(GetType(MyControl), Me)
    End Sub
    
    Public Overloads Overrides Sub Dispose()
        If Not (license Is Nothing) Then
            license.Dispose()
            license = Nothing
        End If
    End Sub
End Class

単純なライセンス処理を実装する ASP.NET サーバー コントロールの例を次に示します。

using System;
using System.ComponentModel;
using System.Web.UI;

public class MyControl : Control {
    private License license = null;
    public MyControl () {
        license = LicenseManager.Validate(typeof(MyControl), this);
    }
    public override void Dispose() {      
          if (license != null) {
            license.Dispose();
            license = null;
          }
      base.Dispose();
    }    
}
[Visual Basic]
Imports System
Imports System.ComponentModel
Imports System.Web.UI

<LicenseProvider(GetType(LicFileLicenseProvider))> Public Class  MyControl 
Inherits Control
    Private license As License
    
    Public Sub New()
        license = LicenseManager.Validate(GetType(MyControl), Me)
    End Sub
    
    Public Overrides Sub Dispose()
        If Not (license Is Nothing) Then
            license.Dispose()
            license = Nothing
        End If
    End Sub
End Class

ここに示した例では、組み込みライセンス プロバイダ クラスの LicFileLicenseProvider を使用しています。このクラスではテキストのライセンス ファイルを使用でき、また COM (ActiveX) のライセンス処理と同様の動作を行います。より複雑なライセンス処理のシナリオ (XML Web サービスを呼び出して、コンポーネントのインスタンス数を制限する場合など) では、別の種類のライセンス プロバイダが必要です。

ライセンス処理のサンプルについては、「Windows フォーム クイック スタート」で「.NET サンプル - Windows フォーム : コントロールの作成」の「LicensedControl サンプル」を参照してください。

参照

コンポーネントの開発