コンポーネントおよびコントロールのライセンス処理
.NET Framework には、すべてのコンポーネント (Windows フォーム コントロールや ASP.NET サーバー コントロールを含む) について同一のライセンス処理モデルが用意されています。このライセンス処理モデルは、Microsoft ActiveX® コントロールのライセンス処理と完全な互換性があります。
ライセンス処理を行うことで、コントロール作成者は、ユーザーがそのコントロールの使用権を許可されているかどうかを確認することにより、知的財産権の保護に役立てることができます。この確認は実行時よりも、コントロールがアプリケーションに組み込まれるデザイン時に、より重要になります。ライセンスが許可されたコントロールがデザイン時に合法的に使用される場合 (これ以外の方法では使用できません)、アプリケーションには自由な配布を許可するランタイム ライセンスが付与されます。
このライセンス処理モデルでは、コンポーネントやコントロールから検証ロジックを分離することにより、その他のさまざまなレベルでのライセンス処理サポートも可能にします。ライセンスの許可および検証ロジックは、ライセンス プロバイダによって実行されます。ライセンス プロバイダは、System.ComponentModel.LicenseProvider から派生したクラスです。ライセンス処理を有効にするためにコンポーネント作成者が行う必要がある手続きは簡単です。
作成したコンポーネントに対するライセンス処理を有効にするには
- クラスに LicenseProviderAttribute を適用します。
- コンストラクタで LicenseManager.Validate または LicenseManager.IsValid を呼び出します。
- クラスの終了処理で、または終了処理を呼び出す前に、許可したすべてのライセンスに対して 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 サンプル」を参照してください。