SharePoint アドイン製品一覧
SharePoint 2010 開発のステップ・バイ・ステップ
Windows Azure 入門
Windows Azure How-To 集
WCF / WF 入門
(Office 2003 (及び、VSTO 2005) については、こちら の記事を参照してください)
環境:Visual Studio 20082007 Microsoft Office system
こんにちは。
現在、つぎなる技術訴求に向けて猛烈に準備中ですが、先日、福井で INETA & Microsoft 協賛のセミナーがあり、表題のご質問を頂きましたので、ブログにて記載させていただくことにします。
まず、この質問 (表題) の背景とインパクトを記載しましょう。
ご存知の方も多いと思いますが、VSTO v3 では ClickOnce での配置を考慮して設計されており、[発行] をおこなうとアドイン (アプリケーションレベル) はもちろんのこと、ドキュメントレベルのカスタムアプリケーションの ClickOnce も実現されているのがわかります。(ただし、ドキュメントレベルの場合は、.dll などが ClickOnce により配置されますので、ドキュメントは、こちら に記載されている概念と同じ要領で、ダウンロードしてから使用します。つまり、ドキュメントは利用者ごとに管理して、dll などプログラムだけを共有するという優れた考え方です。)
Visual Studio 2008 で Office のプロジェクトを作成して頂くとわかりますが、従来、VSTO のプロジェクトを作成すると同時に作成されていた msi のプロジェクト (Windows Installer によるセットアッププロジェクト) も無くなり、かつ MSDN の記事を見ても、2007 Office system については ClickOnce を主体とした記述ばかりで、msi (Windows Installer) を使った配布方法の情報がほとんどありません。(さも、「全部 ClickOnce でやってくれ」 といった感じです。)すべて ClickOnce で済めば良いのですが、例えば「製品」を開発した場合など、現実には、どうしても msi で配りたくなるケースが発生するはずです。
MSDN : Office ソリューションの配置http://msdn2.microsoft.com/ja-jp/library/bb157879.aspx
以前の VSTO 2005 時代の msi による配置については、VSTO 固有のコードアクセスセキュリティの要件があり、こちらのブログ に記載したように裏ワザ的な方法が必要でした。VSTO v3 からは、ClickOnce への対応などを可能とするため、こちら (この頃は、VSTO v3 もまだベータ版で ClickOnce が開発途中でありました、、、) に記載したように、「Inclusion List」と呼ばれる、いわば VSTO 版のセキュリティテーブルが使われるようになり、以前紹介した技はそのまま使えなくなっています。
こうした背景を踏まえ、以下に、Office 2007 と Visual Studio 2008 を使って、インストーラー (msi) を作成する手順を見てみましょう。
なお、以下の説明では、画面のスナップショットなどはかなり省略させて頂きますが、セットアップ プロジェクトの作成手順の詳細は こちらの VSTO 2005 の頃のインストーラー作成の記事 を参照してください。(上述したように、セキュリティの考え方が以前とはまったく異なっており、コード アクセス セキュリティ ではなく、下記の Inclusion List を使った方法に変更されているので注意してください。その他の概念は同様です。)
ドキュメントレベルのプロジェクトであればこれで完了ですが、アプリケーションレベル (つまり AddIn) の場合には、ユーザのレジストリに、このアドインを登録する必要がありますので、さらに以下を実施します。
以上で "いったんは" 完了です。 このセットアップ プロジェクトをビルドしてインストーラーを作成し、作成されたインストーラー (msi) を別のマシン上などで実行してインストールをおこなってください。
そして、アプリケーションを実行してみてください。最初に実行して頂くとわかりますが、不明な署名のプログラムに対してインストールを許可するかどうか確認する以下のダイアログボックスが表示されるのがわかります。
これはいったい何でしょうか?実はここで、先ほどの Inclusion List の登場です。
この画面が表示される理由は、Inclusion List (俗な言い方ですがセキュリティテーブル) にアプリケーションが登録されていないために表示されるもので、[インストール] をユーザが選択したときにはじめてユーザの Inclusion List にセキュリティ情報の登録がおこなわれ、以降、使用可能になります。つまり、VSTO 2005 の頃と同様、ファイルを置いただけではプログラムは実行できないようになっていて、このようにユーザが明示的にアクションをおこなうか、許可されたコードで設定をおこなわない限り、プログラムは動作しない仕様となっています。(VSTO 2005 の頃はコードアクセスセキュリティの設定をしていないとダイアログすら出てこなかったわけですから、かなりの進歩だと思ってください、、、)
さて、ここで話を終えても、開発者の皆さんは「さすが!セキュリティに配慮されているんだ、感心、感心、、、」とは納得されないでしょう。そもそも msi ではユーザが能動的に「インストール」をおこなっているわけで、インストールボタンが 2 回出てくるというのは頂けません。さらに上記のように登録された Inclusion List 上のデータは、アンインストールの際に何も実施していないのでゴミのように残り続けます。
そこで、こちらのブログ に記載した方法と同様の要領で、インストーラのコードから Inclusion List に登録をしてしまおうという話になってきます。下記の通り実施します。
なお、カスタムアクションによるレジストリ変更などのトラブルについて開発者の方で責任を持って頂けるという前提で記載しています。サンプルは、以下のサイトからダウンロードすることが可能です。
MSDN Code Gallery : Deploying a VSTO 3.0 solution for the Office 2007 using Windows Installers http://code.msdn.microsoft.com/VSTO3MSI/Release/ProjectReleases.aspx?ReleaseId=729
以上で完了しました。
今度は、もう例のダイアログが表示されないことがわかります。
なお、プロジェクトにゴミのようにたくさんの dll が配置されていると思いますが、これは PIA (2007 Microsoft Office Primary Interrop Assemblies) と呼ばれるもので、これらを [必須コンポーネント] として初回のみインストールし、以降は再利用することが可能ですが、少々面倒な設定が必要になりますので、ここでは省略します。(これについては、Visual Studio 2005 Tools for Office Second Edition (VSTO SE) の頃の以下の記事に記載されています。この中にある ComponentCheck.cpp は上記のサンプル内に入っています。)
MSDN : Windows インストーラを使用して Visual Studio 2005 Tools for Office Second Edition ソリューションを配置する http://www.microsoft.com/japan/msdn/office/2007/bb332051.aspx
ClickOnce をはじめとした VSTO v3 以降のクライアント系の Office 開発 (VSTO 等) については、エバンジェリスト 小高 がイベントや Web キャストなどでいろいろとご紹介していますので、是非参考にしてみてください (Microsoft Conference でも小高の VSTO セッションがありますので、ご期待ください!)
PingBack from http://www.basketballs-sports.info/basketball-chat/?p=731
環境: .NET Framework 4.0 Community Technology Preview (CTP) Visual Studio 2010 Community Technology Preview