VSTOを使ったOutlook2003のアドインを開発したのですが、
http://blogs.wankuma.com/yaju/archive/2008/11/10/160848.aspx
今頃になって導入準備となり、下記のエラーに嵌まってしまいました。
Debug上では動作するのですが、インストーラでアドインを入れた場合、詳細オプション→COMアドイン→使用できるアドインでチェック付けると、下記のエラーが出て動作してくれません。
「読み込まれていません、COM アドインの読み込み中にランタイムエラーが発生しました。」
この原因が分からなく、このエラー情報をネットで検索しても大した情報も得られず、配布するアセンブリが悪いのではないか、レジストリの内容が間違っていないか、プログラムは悪いのかと起動時にMsgBox("Hello World")だけ出るもので試してみたりとか
下記サイトを、印刷してじっくり読み込んだりとか(原因が分かった後、読むと納得)
Visual Studio 2005 Tools for Office での Outlook アドイン サポートのアーキテクチャ
http://msdn.microsoft.com/ja-jp/library/aa537182(office.11).aspx
なんせ、Debug上では動作してしまうため、いろいろ手をつくすも、解決できなくて・・・
せめて、このエラーの詳しい情報が得られないだろうかと、VSTO関連のサイトで見直して下記サイトのある一文をやっと見つけました(^-^)
アプリケーション レベルのプロジェクトのデバッグ
http://msdn.microsoft.com/ja-jp/library/ms269003(VS.80).aspx
「エラーが発生するたびにメッセージ ボックスに表示するには、
VSTO_SUPPRESSDISPLAYALERTS 変数を 0 に設定します。」
環境変数にVSTO_SUPPRESSDISPLAYALERTSを追加し値を0にセット後、Outlookを起動すると、例外エラーがメッセージボックスで表示されました。
「System.IO.FileLoadException: ファイルまたはアセンブリ 'xxxxAddin'、
またはその依存関係の 1 つが読み込めませんでした。
実行するためのアクセス許可を与えることができませんでした。
ファイル名 'xxxxAddin' です。
System.Security.Policy.PolicyException: 実行するためのアクセス許可を取得できません。」
原因は、CAS(コード アクセス セキュリティ ポリシー) だったんです。
原因が分かれば、対処は可能ですね。
セキュリティポリシーの設定
コントロールパネル-管理ツール-Microsoft .NET Framework 2.0 Configration
ランタイムセキュリティポリシー→ユーザー→コードグループ→VSTOProject→(既定の会社名)を追加
メンバーシップ条件 URL C:\Program Files\(既定の会社名)\*
アクセス許可 FullTrust
Debug上で動作していたのは、セキュリティポリシーの設定がVS側で自動的に作成されていたからです。SetUp.exeでインストールした場合、セキュリティポリシーの設定はツール Caspol.exe
を使って別途セットしないとね。
コード アクセス セキュリティ ポリシー ツール (Caspol.exe)
http://msdn.microsoft.com/ja-jp/library/cb6t8dtz(VS.80).aspx
インストール時にインストール先のフォルダパスをレジストリに書き込む
http://dobon.net/vb/dotnet/deployment/writeinstdirinreg.html
おかげで、やろうとした仕事がほとんど進まなかった、とほほ(T^T)