次の方法で共有


ApplicationActivator クラス

定義

マニフェストに基づくアセンブリのアクティベーションの基本クラスを提供します。

public ref class ApplicationActivator
[System.Runtime.InteropServices.ComVisible(true)]
public class ApplicationActivator
[<System.Runtime.InteropServices.ComVisible(true)>]
type ApplicationActivator = class
Public Class ApplicationActivator
継承
ApplicationActivator
属性

次のコード例は、マニフェスト ベースのアプリケーションの現在DomainManagerの から オブジェクトを取得ApplicationActivatorする方法を示しています。

using System;
using System.Collections;
using System.Text;
using System.Security.Policy;
using System.Reflection;
using System.Security;
using System.Runtime.Hosting;

namespace ActivationContextSample
{
    public class Program : MarshalByRefObject
    {
        public static void Main(string[] args)
        {
            // Get the AppDomainManager from the current domain.
            AppDomainManager domainMgr = AppDomain.CurrentDomain.DomainManager;
            // Get the ApplicationActivator from the AppDomainManager.
            ApplicationActivator appActivator = domainMgr.ApplicationActivator;
            Console.WriteLine("Assembly qualified name from the application activator.");
            Console.WriteLine(appActivator.GetType().AssemblyQualifiedName);
            // Get the ActivationArguments from the SetupInformation property of the domain.
            ActivationArguments activationArgs = AppDomain.CurrentDomain.SetupInformation.ActivationArguments;
            // Get the ActivationContext from the ActivationArguments.
            ActivationContext actContext = activationArgs.ActivationContext;
            Console.WriteLine("The ActivationContext.Form property value is: " +
                activationArgs.ActivationContext.Form);
            Console.Read();
        }
    
        public void Run()
        {
            Main(new string[] { });
            Console.ReadLine();
        }
    }
}
Imports System.Collections
Imports System.Text
Imports System.Security.Policy
Imports System.Reflection
Imports System.Security
Imports System.Security.Permissions
Imports System.Runtime.Hosting



Public Class Program
    Inherits MarshalByRefObject

    <SecurityPermission(SecurityAction.LinkDemand, ControlDomainPolicy:=True)> _
    Public Shared Sub Main(ByVal args() As String)
        ' Get the AppDomainManager from the current domain.
        Dim domainMgr As AppDomainManager = AppDomain.CurrentDomain.DomainManager
        ' Get the ApplicationActivator from the AppDomainManager.
        Dim appActivator As ApplicationActivator = domainMgr.ApplicationActivator
        Console.WriteLine("Assembly qualified name from the application activator.")
        Console.WriteLine(appActivator.GetType().AssemblyQualifiedName)
        Dim ac As ActivationContext = AppDomain.CurrentDomain.ActivationContext
        ' Get the ActivationArguments from the SetupInformation property of the domain.
        Dim activationArgs As ActivationArguments = AppDomain.CurrentDomain.SetupInformation.ActivationArguments
        ' Get the ActivationContext from the ActivationArguments.
        Dim actContext As ActivationContext = activationArgs.ActivationContext
        Console.WriteLine("The ActivationContext.Form property value is: " + _
         activationArgs.ActivationContext.Form.ToString())
        Console.Read()

    End Sub

    <SecurityPermission(SecurityAction.LinkDemand, ControlDomainPolicy:=True)> _
    Public Sub Run()
        Main(New String() {})
        Console.ReadLine()

    End Sub
End Class

注釈

AppDomain クラスには、すべてのアクティブ化呼び出しがApplicationActivatorルーティングされる、指定されたインスタンスが 1 つあります。 現在AppDomainの の はAppDomainManager、この目的のために独自のカスタムApplicationActivatorを提供できます。 カスタム ApplicationActivator が指定されていない場合は、既定値 ApplicationActivator のインスタンスが作成されます。

次の手順では、既定 CreateInstance のメソッド実装の動作について説明します。

  1. アクティブ化するアドインの が ActivationContext 現在のドメインの と ActivationContext 一致するかどうかを確認します。一致しない場合は、手順 2 に進みます。 それ以外の場合は、アセンブリを実行し、オブジェクト ハンドルにラップされた結果を返します。

  2. 新しい AppDomainでアドインをアクティブにします。 アドインの を使用してActivationArguments新しい AppDomain を初期化するには、次の手順を実行します。

    1. アドインのアクティブ化コンテキストをActivationArguments含む オブジェクトを使用して、新しい AppDomainSetup オブジェクトを作成します。

    2. メソッドを CreateInstanceHelper 呼び出して、 オブジェクトを使用して新しいドメインを AppDomainSetup 作成します。

    3. メソッドは CreateInstanceHelper 、 メソッドを HostSecurityManager.DetermineApplicationTrust 呼び出してアドインの ApplicationTrust オブジェクトを取得します。 プロパティが を IsApplicationTrustedToRun 返す true場合は、アドインが実行されます。 そうでない場合は、 CreateInstanceHelper 実行アクセス許可を取得できなかったことを示す をスロー PolicyException します。

    4. アドインの実行が信頼されている場合は、アドインの に対ActivationContextして新しい AppDomain が作成および構成され、アドインが読み込まれて実行されます。

    5. アドインのアクティブ化の結果が返され、オブジェクト ハンドルにラップされます。

カスタム アクティベーターは、特定の状況に合わせてアドインのアクティブ化を調整できます。 たとえば、カスタム アクティベーターは、毎回新しいドメインを作成する代わりに、このアドインをアクティブにする既存 AppDomain のものを見つけることができます。

次の手順では、既存AppDomainの でアドインをアクティブにするカスタムApplicationActivatorの動作について説明します。

  1. カスタム アクティベーターは、アクティブ化されているアドインと同じ ActivationContext ドメインを検索します。

  2. ActivationContextプロセスで がこれまでに見たことがない場合、カスタム アクティベーターは、 メソッドを直接呼び出CreateDomainすか、基底クラスの にこのアクティビティをCreateInstanceHelper委任することで、このの新しい AppDomainActivationContext を作成します。

  3. 同じ ActivationContextを持つ既存のドメインがある場合、アクティベーターは、ターゲット ドメイン内の CreateInstanceApplicationActivator メソッド呼び出しを委任できます。 これは、ターゲット に存在する への ApplicationActivator クロスドメイン呼び出しであることに注意してください AppDomain

コンストラクター

ApplicationActivator()

ApplicationActivator クラスの新しいインスタンスを初期化します。

メソッド

CreateInstance(ActivationContext)

指定されたアクティベーション コンテキストを使用して、アクティブ化するアプリケーションのインスタンスを作成します。

CreateInstance(ActivationContext, String[])

指定したアクティブ化コンテキストとカスタムアクティブ化データを使用して、アクティブ化するアプリケーションのインスタンスを作成します。

CreateInstanceHelper(AppDomainSetup)

指定した AppDomainSetup オブジェクトを使用してアプリケーションのインスタンスを作成します。

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

適用対象