the 2007 Microsoft Office system のブラックリスト (blacklisting) を Beta 2 で試してみる


環境:
Office Professional 2007 Beta 2
VSTO v3 JuneCTP 

こんにちは。

Office 2007 では、新しい VSTO アドインに対応したブラックリスト機能を持っています。
従来の COM アドインのときにもあった、悪いことをするとレジストリの LoadBehavior が更新されて使えなくなる(そして、どう戻せば良いの?)というものではなく、Office の画面上から管理などもおこなえる優れものになります。

この動きについて、実際に動作をさせて検証してみましょう。

■ 新しいVSTOマネージアドインの場合

(1) VSTO v3 JuneCTP を使用して、簡単なメッセージボックスなどを表示する Excel Addin プロジェクトを作成してみましょう。
このアドインを VSTOGoodAddin と名づけて登録(リビルド)しましょう。

(2) つぎに、別の Excel Addin プロジェクトを作成し、ThisApplication.Designer.cs の ThisApplication コンストラクタに以下のコードを記述してみましょう。

            if (MessageBox.Show("Kill Excel?", "VSTO Add-in", MessageBoxButtons.YesNo)
                == DialogResult.Yes)
            {
                Process[] procs = Process.GetProcessesByName("Excel");
                if (procs.Length > 0)
                {
                    procs[0].Kill();
                }
            }

(using 句で System.Windows.Forms、System.Diagnostics を含めておいてください。)

(3) このプロジェクトを VSTOBadAddin と名づけて登録しましょう。

(4) Excel を起動してください。Excel を Kill するか確認するダイアログボックスが表示されると思いますが、まずは [No] をクリックしてみましょう。
起動したら、コントロールメニューの [Excel Option] - [Add-Ins] でアドインを確認してみましょう。それぞれ別々のマニフェストを持ったアドインが認識されているはずです。

(5) では、再度 Excel を起動して今度はダイアログボックスで [OK] を押してみてください。

(6) 一旦、Excel を閉じて再度 Excel を起動すると、不正な動作をした Excel アドインを無効にするか確認してきますので、無効にしてください。

(7) 起動後に確認すると、VSTOBadAddin のみが Disabled Application Add-ins になっています。

■ 上記を COMアドインで動作させた場合

つぎに上記と同じことを以前から存在している COM アドイン を使って実行し、その違いを確認してみましょう。

(1) VSTO v3 JuneCTP を使用して、プロジェクトテンプレートで [Other Project Types] - [Extensibility] の [Shared Add-in] プロジェクトテンプレートを選択します。(ウィザードに従って、Excel 用の COM アドインのプロジェクトを生成します。)
同様に、簡単なメッセージボックスなどを表示するプロジェクトを作成し、このアドインを COMGoodAddin と名づけて登録(リビルド)しましょう。

(2) つぎに、不正なアドインを作成してみましょう。
上記と同じ不正コードを Connect.cs の Connect メソッド内に記述して、COMBadAddin として登録しましょう。

(3) 先程同様に、起動したら、コントロールメニューの [Excel Option] - [Add-Ins] でアドインを確認してみてください。双方とも、CLR の shim (mscoree.dll) が [Location] として登録されているのがわかります。
つまり、新しい Office では、VSTO でないアドインは mscoree.dll の共通の起動ポイントをもったアドインとして認識されてしまっています。

(4) では上記同様に不正コードを実行して、再起動してみてください。
今度は、上記の VSTO マネージアドインのときと違い、Good も Bad も双方共に Disabled Application Add-ins に登録されて、双方のアドインが実行されなくなります。

 

このように、今回から、新しいOfficeでは、VSTOのマニフェストの違いを認識します。今回、アンマネージで実装しているOfficeの開発チームと、VSTOの開発チームは、蜜に連携しています。

なお、この仕組みは従来と異なりユーザごとに設定がおこなわれるため、レジストリエントリも HKEY_CURRENT_USER 下です。
また、現ベータ版(TR でない Beta2)では、まだこの周辺の仕組みの実装は完璧な状態ではありません。例えば、Powerpoint では、まだ旧来のアドインのレジストリエントリしか扱えませんし、さらに、上記以外の実装(例:Exceptionを故意に発生させる、上記以外の起動箇所に実装する、など)では動作が変わってくるなどの動作をしますので、現ベータ時点における暫定的な方法である点をご了承ください。

 

Comments (0)

Skip to main content