作成した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]プロパティの設定は不要です。