方法 : さまざまな分離レベルとセキュリティ レベルのアドインをアクティブにする
分離とセキュリティの要件に合わせて、さまざまなアプリケーション ドメイン構成およびプロセス構成を使用してアドインをアクティブにすることができます。 AddInToken クラスの Activate メソッド オーバーロードを使用して、次の場所でアドインをアクティブにすることができます。
専用のアプリケーション ドメイン。これはシステムにより自動生成されます。
既存のアプリケーション ドメイン。他のアドインがある場合も、ない場合も考えられます。
他のアドインと同じ環境 (アプリケーション ドメインおよびプロセス)。
ホストのプロセスから独立した、新しい外部プロセス。 この新しいプロセスには、プロセスを共有する別のアドインを含めることができます。
新しいアプリケーション ドメインまたはプロセスでアドインをアクティブにする際には、PermissionSet または AddInSecurityLevel オブジェクトを使用して、セキュリティ レベルを指定する必要があります。 アドインのアクティブ化の詳細については、「アドインのアクティブ化」を参照してください。
次の手順では、Activate メソッド オーバーロードを使用してこのようなアクティブ化オプションを実装する方法について説明します。 この例では、パイプライン セグメントとアドイン キャッシュが作成済みであり、1 つ以上のアドインが見つかり、そのアドインが tokens という名前の AddInToken コレクションに返されるものとします。 キャッシュ ファイルを作成してアドインを検索する方法の詳細については、「アドイン探索」を参照してください。
新しいアプリケーション ドメインでアドインをアクティブにするには
Activate<T>(AddInSecurityLevel) メソッド オーバーロードまたは Activate<T>(PermissionSet) メソッド オーバーロードを使用します。
'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);
他のアドインと同じアプリケーション ドメインでアドインをアクティブにするには
Activate<T>(AppDomain) メソッド オーバーロードを使用します。
' 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));
他のアドインと同じアプリケーション ドメインおよびプロセスでアドインをアクティブにするには
Activate<T>(AddInEnvironment) メソッド オーバーロードを使用します。
' 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));
新しいプロセスでアドインをアクティブにするには
Activate<T>(AddInProcess, AddInSecurityLevel) メソッド オーバーロードまたは Activate<T>(AddInProcess, PermissionSet) メソッド オーバーロードを使用します。
' 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);