Gewusst wie: Aktivieren von Add-Ins mit unterschiedlichen Isolations- und Sicherheitsstufen
Sie können ein Add-In aktivieren, indem Sie verschiedene Anwendungsdomänen- und Prozesskonfigurationen verwenden, die sich für Ihre Isolations- und Sicherheitsanforderungen eignen. Die Activate-Methodenüberladungen der AddInToken-Klasse stellen die folgenden Auswahlmöglichkeiten zum Aktivieren eines Add-Ins bereit:
In der Anwendungsdomäne des Add-Ins, die automatisch vom System generiert wird.
In einer vorhandenen Anwendungsdomäne mit oder ohne andere Add-Ins.
In derselben Umgebung (Anwendungsdomäne und Prozess) wie ein anderes Add-In.
In einem neuen, externen Prozess, der vom Prozess des Hosts getrennt ist. Der neue Prozess kann andere Add-Ins enthalten, die den Prozess ebenfalls nutzen.
Wenn Sie ein Add-In in einer neuen Anwendungsdomäne oder einem neuen Prozess aktivieren, müssen Sie eine Sicherheitsstufe mit einem AddInSecurityLevel-Objekt oder einem PermissionSet-Objekt angeben. Weitere Informationen zum Aktivieren von Add-Ins finden Sie unter Add-In-Aktivierung.
Die folgenden Verfahren verdeutlichen, wie diese Aktivierungsoptionen mit den Activate-Methodenüberladungen implementiert werden. In den Beispielen wird davon ausgegangen, dass das Pipelinesegment und Add-In-Caches erstellt wurden und dass ein oder mehrere Add-Ins gefunden und in einer AddInToken-Auflistung mit der Bezeichnung tokens zurückgegeben wurden. Weitere Informationen zum Erstellen der Cachedateien und zum Suchen von Add-Ins finden Sie unter Ermitteln von Add-Ins.
So aktivieren Sie ein Add-In in einer neuen Anwendungsdomäne
Verwenden Sie die Activate<T>(AddInSecurityLevel)-Methodenüberladung oder die Activate<T>(PermissionSet)-Methodenüberladung.
'Ask the user which add-in they would like to use. Dim selectedToken As AddInToken = ChooseAddIn(tokens) 'Activate the selected AddInToken in a new 'application domain with the Internet trust level. Dim CalcAddIn As Calculator = selectedToken.Activate(Of Calculator)(AddInSecurityLevel.Internet) 'Run the add-in using a custom method. RunCalculator(CalcAddIn)
//Ask the user which add-in they would like to use. AddInToken selectedToken = ChooseAddIn(tokens); //Activate the selected AddInToken in a new //application domain with the Internet trust level. Calculator CalcAddIn = selectedToken.Activate<Calculator>(AddInSecurityLevel.Internet); //Run the add-in using a custom method. RunCalculator(CalcAddIn);
So aktivieren Sie ein Add-In in derselben Anwendungsdomäne wie ein anderes Add-In
Verwenden Sie die Activate<T>(AppDomain)-Methodenüberladung.
' Get the application domain ' of an existing add-in (CalcAddIn). Dim aiCtrl As AddInController = AddInController.GetAddInController(CalcAddIn) Dim AddInAppDom As AppDomain = aiCtrl.AppDomain ' Activate another add-in in the same appliation domain. Dim CalcAddIn3 As Calculator = selectedToken2.Activate(Of Calculator)(AddInAppDom) ' Show that the CalcAddIn3 was loaded ' into CalcCaddIn's application domain. Dim aic As AddInController = AddInController.GetAddInController(CalcAddIn3) Console.WriteLine("Add-in loaded into existing application domain: {0}", _ aic.AppDomain.Equals(AddInAppDom))
// Get the application domain // of an existing add-in (CalcAddIn). AddInController aiCtrl = AddInController.GetAddInController(CalcAddIn); AppDomain AddInAppDom = aiCtrl.AppDomain; // Activate another add-in in the same application domain. Calculator CalcAddIn3 = selectedToken2.Activate<Calculator>(AddInAppDom); // Show that CalcAddIn3 was loaded // into CalcAddIn's application domain. AddInController aic = AddInController.GetAddInController(CalcAddIn3); Console.WriteLine("Add-in loaded into existing application domain: {0}", aic.AppDomain.Equals(AddInAppDom));
So aktivieren Sie ein Add-In in derselben Anwendungsdomäne und in demselben Prozess wie ein anderes Add-In
Verwenden Sie die Activate<T>(AddInEnvironment)-Methodenüberladung.
' Get the AddInController of a ' currently activated add-in (CalcAddIn). Dim aiController As AddInController = AddInController.GetAddInController(CalcAddIn) ' Select another token. Dim selectedToken2 As AddInToken = ChooseAddIn(tokens) ' Activate a second add-in, CalcAddIn2, in the same ' appliation domain and process as the first add-in by passing ' the first add-in's AddInEnvironment object to the Activate method. Dim aiEnvironment As AddInEnvironment = aiController.AddInEnvironment Dim CalcAddIn2 As Calculator = _ selectedToken2.Activate(Of Calculator)(aiEnvironment) ' Get the AddInController for the second add-in to compare environments. Dim aiController2 As AddInController = AddInController.GetAddInController(CalcAddIn2) Console.WriteLine("Add-ins in same application domain: {0}", _ aiController.AppDomain.Equals(aiController2.AppDomain)) Console.WriteLine("Add-ins in same process: {0}", _ aiEnvironment.Process.Equals(aiController2.AddInEnvironment.Process))
// Get the AddInController of a // currently actived add-in (CalcAddIn). AddInController aiController = AddInController.GetAddInController(CalcAddIn); // Select another token. AddInToken selectedToken2 = ChooseAddIn(tokens); // Activate a second add-in, CalcAddIn2, in the same // appliation domain and process as the first add-in by passing // the first add-in's AddInEnvironment object to the Activate method. AddInEnvironment aiEnvironment = aiController.AddInEnvironment; Calculator CalcAddIn2 = selectedToken2.Activate<Calculator>(aiEnvironment); // Get the AddInController for the second add-in to compare environments. AddInController aiController2 = AddInController.GetAddInController(CalcAddIn2); Console.WriteLine("Add-ins in same application domain: {0}", aiController.AppDomain.Equals(aiController2.AppDomain)); Console.WriteLine("Add-ins in same process: {0}", aiEnvironment.Process.Equals(aiController2.AddInEnvironment.Process));
So aktivieren Sie ein Add-In in einem neuen Prozess
Verwenden Sie die Activate<T>(AddInProcess, AddInSecurityLevel)-Methodenüberladung oder die Activate<T>(AddInProcess, PermissionSet)-Methodenüberladung.
' Create an external process. Dim pExternal As New AddInProcess() ' Activate an add-in in the external process ' with a full trust security level. Dim CalcAddIn4 As Calculator = _ selectedToken.Activate(Of Calculator)(pExternal, _ AddInSecurityLevel.FullTrust) ' Show that the add-in is an an external process ' by verifying that it is not in the current (host's) process. Dim AddinCtl As AddInController = AddInController.GetAddInController(CalcAddIn4) Console.WriteLine("Add-in in host's process: {0}", _ AddinCtl.AddInEnvironment.Process.IsCurrentProcess)
// Create an external process. AddInProcess pExternal = new AddInProcess(); // Activate an add-in in the external process // with a full trust security level. Calculator CalcAddIn4 = selectedToken.Activate<Calculator>(pExternal, AddInSecurityLevel.FullTrust); // Show that the add-in is an an external process // by verifying that it is not in the current (host's) process. AddInController AddinCtl = AddInController.GetAddInController(CalcAddIn4); Console.WriteLine("Add-in in host's process: {0}", AddinCtl.AddInEnvironment.Process.IsCurrentProcess);