Share via


Comment : activer des compléments avec différents niveaux d'isolement et de sécurité

Vous pouvez activer un complément en utilisant différentes configurations de domaine d'application et de processus pour répondre à vos besoins en termes d'isolement et de sécurité. Les surcharges de méthode Activate de la classe AddInToken offrent les choix suivants pour activer un complément :

  • Dans son propre domaine d'application, généré automatiquement par le système.

  • Dans un domaine d'application existant, avec ou sans autres compléments.

  • Dans le même environnement (domaine d'application et processus) qu'un autre complément.

  • Dans un nouveau processus externe, distinct du processus de l'hôte. Le nouveau processus peut inclure d'autres compléments qui partagent ce processus.

Lorsque vous activez un complément dans un nouveau domaine d'application ou processus, vous devez spécifier un niveau de sécurité en utilisant un objet AddInSecurityLevel ou PermissionSet. Pour plus d'informations sur l'activation des compléments, consultez Activation de compléments.

Les procédures suivantes indiquent comment implémenter ces options d'activation en utilisant les surcharges de méthode Activate. Les exemples supposent que le segment de pipeline et les caches de complément ont été générés, et qu'un ou plusieurs compléments ont été trouvés et retournés dans une collection AddInToken nommée tokens. Pour plus d'informations sur la génération des fichiers cache et sur la recherche de compléments, consultez Découverte de compléments.

Pour activer un complément dans un nouveau domaine d'application

  • Utilisez la surcharge de méthode Activate<T>(AddInSecurityLevel) ou 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);
    

Pour activer un complément dans le même domaine d'application qu'un autre complément

  • Utilisez la surcharge de méthode 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));
    

Pour activer un complément dans les mêmes domaine d'application et processus qu'un autre complément

  • Utilisez la surcharge de méthode 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));
    

Pour activer un complément dans un nouveau processus

  • Utilisez la surcharge de méthode Activate<T>(AddInProcess, AddInSecurityLevel) ou 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);
    

Voir aussi

Concepts

Découverte de compléments

Rôle du développeur de compléments

Compléments et extensibilité