방법: 다양한 격리 및 보안 수준으로 추가 기능 활성화

격리 및 보안 요구 사항에 맞게 다양한 응용 프로그램 도메인 및 프로세스 구성을 사용하여 추가 기능을 활성화할 수 있습니다. AddInToken 클래스의 Activate 메서드 오버로드는 추가 기능을 활성화하기 위한 다음과 같은 선택 항목을 제공합니다.

  • 시스템에 의해 자동으로 생성되는 고유한 응용 프로그램 도메인에서

  • 다른 추가 기능이 있거나 없는 기존 응용 프로그램 도메인에서

  • 다른 추가 기능과 동일한 환경(응용 프로그램 도메인 및 프로세스)에서

  • 호스트의 프로세스와 별개인 새 외부 프로세스에서. 새 프로세스는 해당 프로세스를 공유하는 다른 추가 기능을 포함할 수 있습니다.

새 응용 프로그램 도메인이나 프로세스에서 추가 기능을 활성화할 경우 AddInSecurityLevel 또는 PermissionSet 개체를 사용하여 보안 수준을 지정해야 합니다. 추가 기능 활성화에 대한 자세한 내용은 추가 기능 활성화를 참조하십시오.

다음 절차에서는 Activate 메서드 오버로드를 사용하여 이러한 활성화 옵션을 구현하는 방법을 보여 줍니다. 예제에서는 파이프라인 세그먼트 및 추가 기능 캐시가 빌드되었으며 하나 이상의 추가 기능이 발견되어 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);
    

참고 항목

개념

추가 기능 검색

추가 기능 개발자 경험

추가 기능 및 확장성