2

データベースからデータをフェッチし、データベースにデータを格納するためにWebサービスで認証するOutlookアドインを開発しています。アドインが起動すると、Webサービスにクエリを実行して、インストールされているアドインのバージョンが現在のバージョンであるかどうかを確認します。そうでない場合は、Outlookからアドインをアンロードします。

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

Webサービスにクエリを実行するには、Webサービスで認証する必要があります。クレデンシャルは、Windowsレジストリ内の暗号化された文字列から取得されます。これらのクレデンシャルは、アドインが起動するたび、またはWebサービスに対してクエリが実行され、ユーザー名やパスワードをレジストリから取得できない場合に実行されるFormオブジェクトから取得されます。これは通常、誰かが上記の値を削除したためです。

クレデンシャルが保存されるたびに、それらのクレデンシャルを使用してWebサービスにクエリを実行し、アドインが正しいバージョンであるかどうかを確認します。そうでない場合は、COMアドインをOutlookから切断します。

Webサービスが他の目的で照会されるときはいつでも、アドインが正しいバージョンであるかどうかを確認するために最初に照会が行われます。そうでない場合は、COMアドインをOutlookから切断します。

私の知る限り、アドインの切断はOutlook.Applicationオブジェクトからのみ実行できますが、これまではアドインオブジェクトからしかアクセスできませんでした。

私が理解する必要があるのは、Outlookアドインを切断する方法、またはアドインオブジェクトにいないときにOutlookアドインを無効にする方法です。

4

1 に答える 1

2

リボンのコンテキストを介してCOMオブジェクトにアクセスできたので、COMAddInオブジェクトを引数として取るパブリック静的メソッドを作成することですべてを解決し、そこから好きなことを実行できました:)

すべてのアドインへの参照は、次のようにリボンのContextプロパティを介して参照できます。

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

静的メソッドは次のようになります。

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;
    }
于 2013-02-05T11:07:15.760 に答える