DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

セットアッププロジェクトをVisual Studio 2012に引き継ぐ

Visual Studio 2010以前では、セットアッププロジェクト(デプロイメントプロジェクト)によってWindows Installerのパッケージ(MSIファイル)を作成することができました。しかしVisual Studio 2012からは、セットアッププロジェクトが使えなくなりました。よって、Visual Studio 2010以前で作成したセットアッププロジェクトを2012で開くことができません。

セットアッププロジェクトが含まれるソリューションをVisual Studio 2012で開くと、下図のようなダイアログが出て、セットアッププロジェクトがサポート外で、開くことができないというメッセージが表示されます。

プロジェクトとソリューションの変更をレビュー

つまり、セットアッププロジェクトを使うには、Visual Studio 2010以前を使い続けるか、別のインストーラに切り替えるしかありません。

別のインストーラに切り替える場合、その有力な候補は、「InstallShield Limited Edition for Visual Studio」(ISLE)でしょう。MSDNの「Visual Studio 2012 の互換性」ではISLEの使用が勧められており、セットアッププロジェクトの正式な継承者といってもよいでしょう。ISLEでセットアッププロジェクトの設定をインポートすることもできます。

それ以外にも、Windows Installer XML(WiX)という選択もあります。WiXにもセットアッププロジェクトの設定をインポートする方法があります。

ここでは、ISLEとWiXでにセットアッププロジェクトの設定を引き継ぐ方法について紹介します。ただし、引き継いだ後のこれらのツールの使い方までは説明しません。

InstallShield Limited Edition for Visual Studioに引き継ぐ

注意:ここの説明で使用しているISLEは、「InstallShield 2012 Spring Limited Edition」です。バージョンが変わると以下の説明と異なる箇所が出てくるかもしれないことをご了承ください。

インストールする

Visual Studio 2012のメニューで「ファイル」-「新規作成」-「プロジェクト」を選択するとダイアログが表示されますが、そのテンプレートメニュー(左側のメニュー)で「その他のプロジェクトの種類」-「セットアップと配置」を選択すると、「InstallShield Limited Edition の有効化」という項目が表示されます。

InstallShield Limited Edition の有効化

これを選んで「OK」ボタンをクリックすると、Webブラウザが開き、InstallShield Limited Edition for Visual Studioの入手方法が表示されます。それに従うと、「InstallShield Limited Edition for Visual Studio - Registration」からパッケージをダウンロードするように指示されます。なおこのページからダウンロードするには、名前、メールアドレス、会社名、職務権限、開発チームの人数、電話番号、国、郵便番号を入力しなければなりません。

補足:「InstallShield Limited Edition の有効化」を選んで「OK」ボタンをクリックすると、「場所」で指定されたフォルダに「名前」のフォルダが作成されますが、中身がなく、空です。これが煩わしいならば、上記のダウンロードページから直接ダウンロードしてしまっても良いでしょう。
補足:ISLEをダウンロードする時に入力したメールアドレスには、上位版へのアップグレートを促すメールが頻繁に送られてくるようですので、そのようなメールが送られてきても問題のないメールアドレスを入力した方がよさそうです。ただし、後述するように、このメールアドレス宛にシリアルナンバーが送られてきますので、確実に受信できるメールアドレスを入力する必要があります。

パッケージをダウンロードしたら、実行してインストールします。はじめに「Microsoft Visual C++ 2008 SP1 Redistributable Package」などのインストールを促されるかもしれませんが、指示に従えば簡単にインストールできます。

インストール完了後に、Visual Studio 2012を再起動します。すると、新しいプロジェクトダイアログの「セットアップと配置」に「InstallShield Limited Edition Project」というのが加わっています。これを選択することで、「InstallShield Limited Edition Project」を作成できます。

InstallShield Limited Edition Project

セットアッププロジェクトをインポートする

ISLEにセットアッププロジェクトをインポートするには、まず「InstallShield Limited Edition Project」(以下、ISLEプロジェクト)を作成します。もしインポートしたいセットアッププロジェクトが、同じソリューション内の別のプロジェクトの出力やファイル(プライマリ出力など)を配置する設定になっている場合は、まずソリューションをVisual Studio 2012で開いてから、そのソリューションに追加する形でISLEプロジェクトを作成した方がよいでしょう。

はじめてISLEを起動した時は、これが時間制限のある試用版であり、5日間しか使えないというメッセージが表示されます。しかしここで「Activate or Register for free copy of InstallShield」を選べば、5日間の制限をなくせます。「Activate ...」を選ぶと、シリアルナンバーの入力が必要になります。シリアルナンバーは、ISLEをダウンロードする時に入力したメールアドレス宛に送られてきます。

Activate or Register for free copy of InstallShield

ISLEプロジェクトを作成すると、そのプロジェクトがVisual Studio 2012で開かれ、以下のような画面になります。

InstallShield Limited Edition Project

ISLEプロジェクトを開いた状態(あるいは、「ソリューションエクスプローラー」でISLEプロジェクトを選択した状態)の時、Visual Studioのメニューに「INSTALLSHIELD LE」という項目が表示されますので、この中にある「Visual Studio Deployment Project Import Wizard...」を選択します。

Visual Studio Deployment Project Import Wizardメニュー

「Visual Studio Deployment Project Import Wizard」では、インポートするセットアッププロジェクト(.vdprojファイル)の選択と、インポートするオプションの選択だけを行います。選択できるオプションは、以下の通りです。

  • Product Name
  • Product Version
  • INSTALLDIR
  • Add or Remove Programs Properties
  • Summary Infomation Stream Properties
  • Product Code
  • Upgrade Code
  • All Users
  • Project Language

Visual Studio Deployment Project Import Wizard

ウィザードが終了すると、インポート完了です。エラーや警告が出ているかもしれませんので(カスタム動作などの複雑な設定がある場合は、まず間違い無く出ます)、「出力」に出ているメッセージを確認してください。エラーや警告が出なくてもビルドに失敗することもあるようなので、ビルドする前に設定に一度目を通しておいた方が良いかもしれません。

ISLEプロジェクトをビルドすると、MSIファイルが作成されます。作成されたファイルのあるフォルダは、メニューの「INSTALLSHIELD LE」-「Open Release Folder ...」で開くことができます。

WiXに引き継ぐ

注意:ここでの説明で使用しているWiXのバージョンは「WiX Toolset v3.7」です。バージョンが変わると以下の説明と異なる箇所が出てくるかもしれません。

ISLEはとても使いやすいツールですが、ライセンスが分かりにくかったり(「About InstallShield Limited Edition in Visual Studio 2010」によると商用利用も可能ということですが、根拠はよく分かりません)、メールアドレスなどの個人情報を入力する必要があったり、機能が制限されていたりと、不安材料も多いです。その点 Windows Installer XML (WiX) は Microsoft Reciprocal License (Ms-RL) ですので、安心です。ただし使いづらく、使いこなすには相当の知識が必要です。

インストールする

WiX Toolset」からWiXのパッケージをダウンロードすることができます。これを実行すると、以下のような画面が表示されます。

WiXインストール画面

この画面で「WiX Toolset」のパネルをクリックすると、WebブラウザでWiXのサイトが開きます。「License」をクリックすると、WiXのライセンス情報が表示されます。

真ん中の「Install」をクリックすると、インストールが開始されます。インストール中は、歯車マークがグルグル回ります。インストールには結構な時間がかかりますので、じっと待ちます。インストールが完了すると、「Install」と表示されていた部分に「Complate」と表示されます。その後、「Exit」をクリックして、終了させます。

インストールに成功すると、スタートメニューに「WiX Toolset v3.7」というフォルダが追加され、その中にWiXやMSIのヘルプへのショートカットができます。また、Visual Studioの「新しいプロジェクト」ダイアログに「Windows Installer XML」というテンプレートのグループができます。

「新しいプロジェクト」の「Windows Installer XML」

Windows Installer XML Setup Projectを作成する

「Windows Installer XML」テンプレートグループにある「Setup Project」を選択して、新しいプロジェクトを作成します。新規プロジェクトとして作成するのではなく、MSIを作成するアプリケーションのソリューションに追加する形で作成した方が良いでしょう。

プロジェクト作成直後、「Product.wxs」が開きます。これが「WiXソースファイル」と呼ばれるもので、XMLで設定が記述されています。これを書き換えることで、設定を変更できます。つまり、セットアッププロジェクトをWiXソースファイルにコンバートできれば、WiXに移行できます。

セットアッププロジェクトをコンバートする

セットアッププロジェクトをWiXソースファイルにコンバートするには、msiからコンバートする方法と、vdprojからコンバートする方法の2つがあります。まずは前者から説明します。

msiからコンバートする

WiX Toolsetの「Dark.exe」を使うことで、msiデータベースからWiXソースファイルを作成することができます。

この方法ではmsiファイルが必要ですので、まずはセットアッププロジェクトをVisual Studio 2010等でビルドしてmsiファイルを作ります。ここでは「Setup1.msi」を作ったとし、これをWiXソースファイルに変換します。

「Dark.exe」は、WiXをインストールしたフォルダの「bin」フォルダ内にあります。コマンドプロンプトで次のようなコマンドを実行すると、WiXソースファイル(Setup1.wxs)を作成できます。なおここでは、先ほどWindows Installer XMLのSetup Projectを作成したフォルダを「C:\wix」とし、「Setup1.msi」のあるフォルダを「C:\vs2010」とします。

dark.exe -x C:\wix C:\vs2010\Setup1.msi C:\wix\Setup1.wxs
補足:これと同じことが、「WiX Edit」を使ってもできます。WiX EditでMSIファイルを開き、wxsファイルとして保存すれば、コンバートできます。

変換に成功すると、「C:\wix」フォルダに「Setup1.wxs」と、「Binary」「File」「Icon」といったフォルダができます。フォルダの中には、MSIファイルに埋め込まれていたファイルが入っています。

このようにして作成した「Setup1.wxs」を、先ほど作成したVisual StudioのSetup Projectに追加して、「Product.wxs」を削除します。(コピー&ペーストで「Product.wxs」の内容を「Setup1.wxs」の内容に置き換えるなどでも結構です。)

基本的なコンバートは以上で完了ですが、このままでは、ビルドした時に作成されるMSIファイルに入れられるファイルは、「File」フォルダにあるファイルになってしまいます。もし、別プロジェクトのプライマリ出力のように、ビルドして作成した最新のEXEファイル等をMSIファイルに入れたいのであれば、WiXソースファイルの<Component>要素内にある<File>要素のSource属性の値を変更して、MSIファイルに入れたいファイルのパスにします。

その他にもエラーや警告が出て、修正しなければならない箇所が出てくるかもしれません。「WiX Edit」を使うとWiXソースファイルの編集が多少楽になるかもしれませんが、難しいことには変わりないでしょう。

vdprojからコンバートする

セットアッププロジェクトのファイルであるvdprojファイルからWiXソースファイルを作成してくれるツールに、「vdproj2wix」があります。これはPowerShellスクリプトですので、実行するには実行ポリシーの変更が必要になるかもしれません。

また、このスクリプトをそのまま実行すると、日本語が文字化けします。これを修正するには、「vdproj2wix.ps1」内の「-encoding ASCII」をすべて「-encoding UTF8」に置換します。

「vdproj2wix.ps1」に引数としてvdprojファイルを渡すと、vdprojファイルと同じフォルダに、vdprojファイルと同じ名前で、wxsファイルが作成されます。

PowerShell -File C:\wix\vdproj2wix.ps1 C:\wix\Setup1.vdproj

後は先の「msiからコンバートする」と同じように、「Setup Project」の「Product.wxs」を「Setup1.wxs」に置き換えます。

ただし、「vdproj2wix」を使って変換できる項目はとても少なく、変換する意味があまり感じられない程ですので、過剰な期待はしない方が良いでしょう。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • Windows Vista以降でUACが有効になっていると、ファイルへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。