Procedura: attivare componenti aggiuntivi con livelli diversi di isolamento e di sicurezza

È possibile attivare un componente aggiuntivo utilizzando configurazioni del processo e del dominio applicazione diverse per soddisfare requisiti di isolamento e sicurezza specifici. Gli overload del metodo Activate della classe AddInToken consentono di scegliere tra le opzioni seguenti per l'attivazione di un componente aggiuntivo:

  • Nel dominio applicazione generato automaticamente dal sistema.

  • In un dominio applicazione esistente, con o senza altri componenti aggiuntivi.

  • Nello stesso ambiente (dominio e processo dell'applicazione) come un altro componente aggiuntivo.

  • In un nuovo processo esterno separato dal processo dell'host. Il nuovo processo può includere altri componenti aggiuntivi che condividono il processo.

Quando si attiva un componente aggiuntivo in un nuovo dominio o un processo dell'applicazione, è necessario specificare un livello di sicurezza utilizzando un oggetto AddInSecurityLevel o PermissionSet. Per ulteriori informazioni sull'attivazione di componenti aggiuntivi, vedere Attivazione di componenti aggiuntivi.

Nelle procedure seguenti viene descritto come implementare queste opzioni di attivazione utilizzando gli overload del metodo Activate. In questi esempi si presuppone che le cache del segmento di pipeline e del componente aggiuntivo siano state compilate e che uno o più componenti aggiuntivi siano stati individuati e restituiti in un insieme AddInToken denominato tokens. Per ulteriori informazioni su come compilare i file di cache e individuare i componenti aggiuntivi, vedere Individuazione di componenti aggiuntivi.

Per attivare un componente aggiuntivo in un nuovo dominio applicazione

  • Utilizzare l'overload del metodo Activate<T>(AddInSecurityLevel) o del metodo 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);
    

Per attivare un componente aggiuntivo nello stesso dominio applicazione come un altro componente aggiuntivo

  • Utilizzare l'overload del metodo 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));
    

Per attivare un componente aggiuntivo negli stessi dominio e processo dell'applicazione come un altro componente aggiuntivo

  • Utilizzare l'overload del metodo 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));
    

Per attivare un componente aggiuntivo in un nuovo processo

  • Utilizzare l'overload del metodo Activate<T>(AddInProcess, AddInSecurityLevel) o del metodo 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);
    

Vedere anche

Concetti

Individuazione di componenti aggiuntivi

Sviluppatori di componenti aggiuntivi

Componenti aggiuntivi ed estensibilità