ApplicationActivator Klasse

Definition

Stellt die Basisklasse für die Aktivierung manifestbasierter Assemblys bereit.

public ref class ApplicationActivator
[System.Runtime.InteropServices.ComVisible(true)]
public class ApplicationActivator
[<System.Runtime.InteropServices.ComVisible(true)>]
type ApplicationActivator = class
Public Class ApplicationActivator
Vererbung
ApplicationActivator
Attribute

Beispiele

Das folgende Codebeispiel zeigt, wie Sie ein ApplicationActivator -Objekt aus dem aktuellen DomainManager für eine manifestbasierte Anwendung abrufen.

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

Hinweise

Es gibt jeweils eine einzelne festgelegte Instanz der -KlasseAppDomain, an die ApplicationActivator alle Aktivierungsaufrufe weitergeleitet werden. Der AppDomainManager für den aktuellen AppDomain kann zu diesem Zweck eine eigene benutzerdefinierte ApplicationActivator Bereitstellen. Wenn keine benutzerdefinierte ApplicationActivator bereitgestellt wird, wird eine Instanz des Standardwerts ApplicationActivator erstellt.

In den folgenden Schritten wird das Verhalten der Standardmethodenimplementierung CreateInstance beschrieben:

  1. Überprüft, ob die ActivationContext des zu aktivierenden Add-Ins mit der ActivationContext der aktuellen Domäne übereinstimmt. Wenn dies nicht der Fall ist, fahren Sie mit Schritt 2 fort. Führt andernfalls die Assembly aus und gibt das Ergebnis zurück, das in ein Objekthandle eingeschlossen ist.

  2. Aktiviert das Add-In in einem neuen AppDomain. Die folgenden Schritte werden ausgeführt, um eine neue AppDomain mithilfe von ActivationArguments für das Add-In zu initialisieren.

    1. Erstellt ein neues AppDomainSetup -Objekt mithilfe eines ActivationArguments -Objekts, das den Aktivierungskontext für das Add-In enthält.

    2. Ruft die CreateInstanceHelper -Methode auf, um mithilfe des AppDomainSetup -Objekts eine neue Domäne zu erstellen.

    3. Die CreateInstanceHelper -Methode ruft die HostSecurityManager.DetermineApplicationTrust -Methode auf, um ein ApplicationTrust -Objekt für das Add-In zu erhalten. Wenn die IsApplicationTrustedToRun -Eigenschaft zurückgibt true, wird das Add-In ausgeführt. Wenn dies nicht der Fehler ist, löst einen ausPolicyException, CreateInstanceHelper der angibt, dass die Ausführungsberechtigung nicht abgerufen werden konnte.

    4. Wenn die Ausführung des Add-Ins als vertrauenswürdig gilt, wird ein neues AppDomain erstellt und für das ActivationContext des Add-Ins konfiguriert, und das Add-In wird geladen und ausgeführt.

    5. Das Ergebnis der Aktivierung des Add-Ins wird zurückgegeben, umschlossen in ein Objekthandle.

Ein benutzerdefinierter Aktivator kann die Aktivierung eines Add-Ins an bestimmte Umstände anpassen. Beispielsweise könnte ein benutzerdefinierter Aktivator ein vorhandenes AppDomain finden, um dieses Add-In zu aktivieren, anstatt jedes Mal eine neue Domäne zu erstellen.

Die folgenden Schritte beschreiben das Verhalten einer benutzerdefinierten ApplicationActivator , die ein Add-In in einem vorhandenen AppDomainaktiviert:

  1. Der benutzerdefinierte Aktivator findet eine Domäne, die über die gleiche ActivationContext wie das zu aktivierende Add-In verfügt.

  2. Wenn noch ActivationContext nie zuvor im Prozess gesehen wurde, erstellt der benutzerdefinierte Aktivator eine neue AppDomain für diese ActivationContext , indem die CreateDomain -Methode direkt aufgerufen oder diese Aktivität an die CreateInstanceHelper in der Basisklasse delegiert wird.

  3. Wenn eine Domäne mit demselben ActivationContextvorhanden ist, kann der Aktivator den CreateInstance Methodenaufruf an die ApplicationActivator in der Zieldomäne delegieren. Beachten Sie, dass dies ein domänenübergreifender Aufruf eines ApplicationActivator wäre, das sich im Ziel AppDomainbefindet.

Konstruktoren

ApplicationActivator()

Initialisiert eine neue Instanz der ApplicationActivator-Klasse.

Methoden

CreateInstance(ActivationContext)

Erstellt eine Instanz der zu aktivierenden Anwendung mit dem angegebenen Aktivierungskontext.

CreateInstance(ActivationContext, String[])

Erstellt eine Instanz der zu aktivierenden Anwendung unter Verwendung des angegebenen Aktivierungskontexts und benutzerdefinierter Aktivierungsdaten.

CreateInstanceHelper(AppDomainSetup)

Erstellt eine Instanz einer Anwendung mithilfe des angegebenen AppDomainSetup-Objekts.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Gilt für: