2013-02-05 4 views
2

데이터베이스에서 데이터를 가져오고 데이터베이스에 데이터를 저장하는 웹 서비스로 인증하는 Outlook Addin을 개발하고 있습니다. 추가 기능은 설치된 추가 기능의 버전이 최신 버전 인 경우 다음 웹을 조회하기 위해프로그래밍 방식으로 Outlook 추가 기능 사용 안 함

Application.COMAddIns.Item("foo").Connect = false; 

의 방법으로하여 Outlook에서 추가 기능을 언로드하지 않을 경우 알아 내기 위해 웹 서비스를 쿼리 시작하면 서비스를 인증해야합니다. 자격 증명은 Windows 레지스트리의 암호화 된 문자열에서 검색됩니다. 이러한 자격 증명은 addin이 시작될 때 또는 웹 서비스에 대한 쿼리가 만들어 질 때마다 실행되는 Form 객체에서 비롯되며 일반적으로 해당 값을 삭제 한 사람으로 인해 사용자 이름 및/또는 비밀번호를 레지스트리에서 검색 할 수 없습니다.

자격 증명이 저장 될 때마다 해당 자격 증명을 사용하여 추가 기능이 올바른 버전인지 확인하기 위해 웹 서비스를 쿼리합니다. 그렇지 않으면 COM 추가 기능이 Outlook과의 연결이 끊어집니다.

다른 목적으로 웹 서비스를 쿼리 할 때마다 addin이 올바른 버전인지 확인하기위한 쿼리가 먼저 만들어집니다. 그렇지 않으면 COM 추가 기능이 Outlook과의 연결이 끊어집니다.

내가 아는 한 addin은 내가 지금까지 Addin 개체에서만 액세스 할 수 있었던 Outlook.Application 개체에서만 연결을 끊을 수 있습니다.

내가 알아야 할 것은 Outlook Addin의 연결을 끊거나 내가 Addin 개체에 있지 않을 때 비활성화하는 방법입니다.

답변

2

리본 컨텍스트를 통해 COM 개체에 액세스 할 수 있으므로 COMAddIn 개체를 인수로 사용하는 공개 정적 메서드를 만들어서 해결했습니다. 거기에서 원하는 모든 작업을 수행 할 수 있습니다.

public static void ThisAddIn_CheckVersion(Microsoft.Office.Core.COMAddIn ThisAddIn) 
    { 
     var rk = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Office\\Outlook\\Addins\\My Outlook Add-in"); 
     if (rk.GetValue("Username") == null || rk.GetValue("Password") == null) 
     { 
      new EditSettingsForm(ThisAddIn).Show(); 
      return; 
     } 

     var sc = new MyWebService.WebServiceClient(); 
     sc.ClientCredentials.UserName.UserName = (rk.GetValue("Username") == null ? null : rk.GetValue("Username").ToString()); 
     sc.ClientCredentials.UserName.Password = (rk.GetValue("Password") == null ? null : Encryptor.Decrypt(rk.GetValue("Password").ToString())); 

     if (sc.GetMyOutlookAddinVersionNumber() != "TESTING") 
     { 
      System.Windows.Forms.MessageBox.Show("The version of My Outlook 2013 Add-in you're using is too old. Please update to the latest version at http://www.foo.bar/"); 
      ThisAddIn.Connect = false; 
     } 

     sc = null; 
    } 
: 정적 방법은 다음과 같습니다

Microsoft.Office.Core.COMAddIns comaddins = ((this.Context as Outlook.Explorer).Application.COMAddIns.Application as Outlook.Application).COMAddIns; 

:

모든 애드 인에 대한 참조는이 같은 리본의 컨텍스트 속성을 통해 참조 할 수 있습니다

관련 문제