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

セットアッププロジェクトの作成

既存のVSTOソリューションを開き、新しいプロジェクトを追加します。


[その他のプロジェクトの種類]⇒[セットアップと配置]⇒[セットアッププロジェクト]を選択します。


OKボタンで確定すると、セットアッププロジェクトが作成されます。

プロジェクト出力の追加

セットアッププロジェクトでは、以下の出力先にファイルをインストールします。

  • アプリケーションフォルダ(Program Files下)
  • ユーザーのデスクトップ
  • ユーザーのスタ−トメニュー



まずは、Officeドキュメントを含むプロジェクトの出力をアプリケーションフォルダにコピーするように設定します。[アプリケーションフォルダ]上で右クリックして、[追加]⇒[プロジェクト出力]を選択します。


既定ではこのように表示されるので、そのままOKボタンを押しても問題ないです。
プロジェクトの出力をアプリケーションフォルダに入れたことによって、セットアッププロジェクト下に、見つかった依存関係が列挙されます。ここで、見つかった依存関係のうち、.NET Frameworkを除く、全ての依存関係を選択し、右クリックメニューから[除外]を選択します。


さらに、[アプリケーションフォルダ]上で右クリックして、[追加]⇒[ファイル]を選択し、以下のファイルを登録しておきます 。

  • ExcelWorkbook1.dll.manifest
  • ExcelWorkbook1.vsto
  • ExcelWorkbook1.xlsm



最後に、セットアッププロジェクトのプロパティを開き、必須コンポーネントの設定を行います。[必須コンポーネント]ボタンをクリックした後の手順は、ClickOnceの時と同じです。

ショートカットの追加

セットアッププロジェクトのファイルシステムにあるExcelブック上で、右クリックメニューからショートカットの作成を選択します。


すると、同じ階層にショートカットが作成されます。


これを、ユーザーのデスクトップ、または、ユーザーのプログラムメニューにドラッグ&ドロップします。

セキュリティ警告の回避

ここまでに作成したソリューションで、インストーラーが作成可能ですが、インストール後にドキュメントを開いた際、以下のようなセキュリティ警告が出てしまいます。
ここでは、これを回避するための方法を示します。


まず、ソリューションエクスプローラから、[追加]⇒[新しいプロジェクト]を選択し、クラスライブラリのプロジェクトを作成します。


クラスライブラリのコードが表示されるため、以下のコードに完全に置き換えます。

using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration.Install;
using System.Security;
using System.Security.Permissions;
using Microsoft.VisualStudio.Tools.Office.Runtime.Security;

namespace InclusionListCustomActions
{
    [RunInstaller(true)]
    public class TrustInstaller
        : Installer
    {
        const string RSA_PublicKey = ;

        public override void Install(IDictionary stateSaver)
        {
            try
            {
                SecurityPermission permission =
                    new SecurityPermission(PermissionState.Unrestricted);
                permission.Demand();
            }
            catch (SecurityException)
            {
                throw new InstallException(
                    "You have insufficient privileges to " +
                    "register a trust relationship. Start Excel " +
                    "and confirm the trust dialog to run the addin.");
            }

            Uri deploymentManifestLocation = null;

            if (Uri.TryCreate(Context.Parameters["deploymentManifestLocation"],
                UriKind.RelativeOrAbsolute, out deploymentManifestLocation) == false)
            {
                throw new InstallException(
                    "The location of the deployment manifest is missing or invalid.");
            }

            AddInSecurityEntry entry = new AddInSecurityEntry(
                            deploymentManifestLocation, RSA_PublicKey);
            UserInclusionList.Add(entry);
            stateSaver.Add("entryKey", deploymentManifestLocation);
            base.Install(stateSaver);
        }

        public override void Uninstall(IDictionary savedState)
        {
            Uri deploymentManifestLocation = (Uri)savedState["entryKey"];
            if (deploymentManifestLocation != null)
            {
                UserInclusionList.Remove(deploymentManifestLocation);
            }
            base.Uninstall(savedState);
        }

        public override void Commit(IDictionary savedState)
        {
            base.Commit(savedState);
        }

        public override void Rollback(IDictionary savedState)
        {
            base.Rollback(savedState);
        }
    }
}

RSA_PublicKeyには、プロジェクト出力ファイルに含まれるmanifestファイル(この例ではExcelWorkbook1.dll.manifest)内に記述されている、タグからタグまでの内容を追加します。


まず、セットアッププロジェクトのアプリケーションフォルダに、今作成したクラスライブラリのプロジェクト出力を追加します。
次に、ソリューションエクスプローラでセットアッププロジェクトを右クリックして、[表示]⇒[カスタム動作]を選択します。


カスタム動作が表示されるので、[インストール]を右クリックし、[カスタム動作の追加]を選択します。


[プロジェクトから項目を選択]ダイアログが開くので、[アプリケーション フォルダ]の中のClassLibrary1のプライマリ出力を選択します。


追加したカスタム動作のプロパティを表示します。


プロパティウィンドウの [CustomActinData] を設定します。


設定内容は以下です。

/deploymentManifestLocation="[TARGETDIR]ExcelWorkbook1.vsto"

同様に、他のカスタム動作([アンインストール]、[確定]、[ロールバック])に、ClassLibrary1のプライマリ出力を選択します。[CustomActinData]プロパティの設定は不要です。