Hatena::ブログ(Diary)

moyashi11の日記

2009-05-12

作成したVSTOアプリケーションをmsi形式で配布する

| 23:02


VSTOExcelのアドインを作成、インストーラを付けようということで
こちらの記事:
松崎 剛ブログ(Tsuyoshi Matsuzaki Blog):VSTOv3によるOffice2007プロジェクトのWindowsInstallerによる配布方法
http://blogs.msdn.com/tsmatsuz/archive/2008/03/31/vsto-v3-windows-installer.aspx
に従ってインストーラを作成してみたところ

インストーラ.exeを実行した後に、インストール先フォルダの「〜.vsto」ファイルを手動で
 実行してカスタムをインストールしないと使えるようにならない

インストーラの再実行でアンインストール、更新バージョンを再インストール
 「〜.vsto」ファイルを実行した時に、
   『同じ ID を持つアプリケーションが既にインストールされているため、この
    アプリケーションインストールすることはできません。
    このアプリケーションインストールするには、このアプリケーション
    マニフェスト バージョンを変更するか、既存のアプリケーションアンインストール
    してください。』
 とエラーメッセージが表示されて、アドインが使用できるようにならない

という問題が起きました。
2番目のエラーは、「〜.vsto」ファイル実行時に作成されたファイルがアンインストール時に
きちんと削除されないのが原因で
Vistaだとメッセージが表示されるようです。
XPではメッセージは出ませんでしたが、
アンインストールした後に コントロールパネル>プログラムの追加と削除 で確認すると
カスタムが残っていて、そのままだと再インストールしてもアドインが使用できなかったので
状態はVistaの方と同じだと思います。



というかそもそも、本来はインストーラを実行するだけで使えるようになるはずであって
〜.vstoを手動で実行しないといけないのがまずおかしい。。


ので、調べてみたところ、どうやら
レジストリのManifestキーが、 [TARGETDIR]〜.vsto|vstolocal と設定していたのが
ビルド時に勝手に [TARGETDIR]〜.dll.manifest に置き換わってしまうのが原因のようです。


直し方を探したら、こちらにそれらしい記述がありました。↓

MSDNライブラリOffice ソリューション配置のトラブルシューティング
Windows インストーラ セットアップ プロジェクトをビルドした後にアドイン用マニフェスト レジストリ キーが変わる

アドイン セットアップ プログラムに含まれるマニフェスト レジストリ キーが、Windows インストーラ セットアップ プログラムビルド時に .vsto から .dll.manifest に変わる場合があります。

この問題の発生を防ぐには、セットアップ プログラムを別のソリューションで作成するか、レジストリ キー値としてアドイン名が含まれる CompanyName.AddinName を使用します。

Visual Studio 2008 SP1 を使用している場合、この回避策を取る必要はありません。
Office ソリューション配置のトラブルシューティング (2007 システム)


・・・・。
説明が短すぎてよくわからんという…('-'
これが発生している=どういう状況、何が起きる、とか書いてあると理解しやすいんですけど…(

まぁとりあえず、回避方法も一応載ってるのでやってみました。


レジストリのManifestキーを CompanyName.AddinName に変更

ビルドしてみると、「〜.dll.manifest」に変わっていました。
インストーラ実行も先程と変化なしです。


■セットアッププロジェクトを別のソリューションで作成

こちらはうまくいきました。

作り方自体は、最初に紹介した記事に従って、と最初と同様なんですが

 3. セットアッププロジェクトの [アプリケーションフォルダ] に以下の 3 つを追加します。
  ・ プロジェクト出力 : <VSTOプロジェクト> のプライマリ出力
  ・ ファイル : 上記のビルドで bin/<構成> ディレクトリ下に出力された .vsto ファイル
  ・ ファイル : 上記のビルドで bin/<構成> ディレクトリ下に出力された .manifest ファイル

の部分については、
1つ目のは、プライマリ出力ではなく、bin/<構成> ディレクトリ下の .dll ファイルを追加します。

それ以外の工程は同様です。
クラスライブラリのプロジェクトは、セットアッププロジェクトの方のソリューションで作成します


これで問題なくインストールアンインストールできるように
.vstoファイルは手動で実行しなくて大丈夫になりました。

静香静香 2010/05/07 23:40 すいません。
Excel のアドインをC#で作っています。
ブログを拝見して同じように作っているのですが、どうしてもうまくいきません。
大変ぶしつけなのですが、インストーラも含めて2つのソリューションごを一式いただけないでしょうか?
テンプレートとして、そこから作成ていくしか、ちょっと納期までに間に合いそうにないです。
こちらの都合で申し訳ないです。
とても失礼だとは思いますが、大変困っております。
是非、よろしくお願いいたします。

ch_shizukach_shizuka 2010/05/08 00:01 moyashi11 さんにのみメールアドレスを公開しました。
よろしくお願いします。