アプリケーションのインストーラを作成する
それでは本格的なインストーラの作成に入りましょう。まずはアプリケーションの作成を……では紙面が尽きてしまいますので、ばっさりと省いてしまいます。アプリケーションはサンプルに同梱してある、STEditというソリューションです(サンプルには、リリース版がビルド済みで同梱されています)。こちらはメモ帳から、新規作成とファイルを開く以外のすべての機能を取り除いたようなアプリケーションになっています。2時間程度で作り上げたプログラムなので、あまり見せられたものではないのですが、一応動くようにはなっています。プログラムそのものは、Visual C++ 2005 Express Edition + PlatformSDKまたは、Visual Studio 2005 Standard Edition以上でビルドできます。実行環境は、ビルドオプションの構成上の関係で、Windows 2000以上でなければ動作しません。また、メモ帳らしく関連付けを行なって、エクスプローラからのダブルクリックでの呼び出しにも対応できるようになっています。
インストーラの作成
それでは早速インストーラのソースです。まずは、実行環境の限定、マージモジュールの指定、ショートカットの設定を施したインストーラです。これを使って、まずはきちんとアプリケーションが動作することを確認します。
<?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2003/01/wi"> <Product Id="9F7E5565-F367-4735-91E6-66BD76D47C53" Name="適すとえでぃた" Language="1041" Version="1.00.0000" Manufacturer="とっちゃん" Codepage="932"> <Package Id="????????-????-????-????-????????????" Description="適すとえでぃた インストーラ" Comments="適すとえでぃた インストーラ" InstallerVersion="200" Compressed="yes" Platforms="Intel" Manufacturer="とっちゃん" Keywords="Installer,MSI,Database" Languages="1041" SummaryCodepage="932" /> <!-- インストール環境を限定。64bitOS または、 Windows2000 以降の最新SP環境 --> <!-- Vista は 600 だが、将来中間バージョンが出ても困らないように、 502(2003 or XPx64) より大きいバージョンは全部対象とする --> <!-- 64bit 版は XP 以降(2000のβ扱いのまま消えた IA64 版は対象外とする) --> <Condition Message= "この Windows では [ProductName] のインストールはできません"> <![CDATA[VersionNT64 >= 501 Or VersionNT > 502 Or(VersionNT = 502 And ServicePackLevel >= 1) Or
(VersionNT = 501 And ServicePackLevel >= 2) Or
(VersionNT = 500 And ServicePackLevel >= 4)]]> </Condition> <Media Id="1" Cabinet="STEdit.cab" EmbedCab="yes" /> <Directory Id="TARGETDIR" Name="SourceDir"> <!-- アプリケーション --> <Directory Id="ProgramFilesFolder" SourceName="PFILE" LongSource="Program Files"> <Directory Id="INSTALLLOCATION" Name="STEdit"> <Component Id="STEdit.exe" Guid="9EC98F2B-2138-4d4e-A97E-10D980061DB6"> <File Id="STEdit.exe" Name="STEdit.exe" KeyPath="yes" DiskId="1" Source="STEdit\release\STEdit.exe" /> <!-- ショートカットとそのアイコン --> <Shortcut Id="STEdit.exe" Directory="AppMenuFolder" Name="STEdit" LongName="適すとえでぃた" Description="適すとえでぃたを実行します" Icon="STEdit.ico" IconIndex="0" Show="normal"> <Icon Id="STEdit.ico" SourceFile="STEdit\STEdit\STEdit.ico"/> </Shortcut> </Component> </Directory> </Directory> <!-- マージモジュール --> <Directory Id="SystemFolder" SourceName="System" LongSource="System32"> <Merge Id="VC80CRTx86.msm" Language="0" DiskId="1" SourceFile="$(env.CommonProgramFiles)\Merge Modules\
Microsoft_VC80_CRT_x86.msm"/> <Merge Id="POLVC80CRTx86.msm" Language="0" DiskId="1" SourceFile="$(env.CommonProgramFiles)\Merge Modules\
policy_8_0_Microsoft_VC80_CRT_x86.msm"/> </Directory> <!-- ショートカット用のフォルダ --> <Directory Id="ProgramMenuFolder"> <Directory Id="AppMenuFolder" Name="STEdit" LongName="適すとえでぃた"/> </Directory> </Directory> <Feature Id="STEdit" Level="1" > <ComponentRef Id="STEdit.exe" /> <MergeRef Id="VC80CRTx86.msm"/> <MergeRef Id="POLVC80CRTx86.msm"/> </Feature> <UIRef Id="WixUI_ErrorProgressText" /> <UIRef Id="WixUI_Minimal" /> </Product> </Wix>
インストーラとアプリケーションの動作確認
インストーラが作成できたら早速、動作確認を行います。今回はインストーラだけではなくアプリケーションの動作確認も行いますので、必ずテスト用の環境を構築するようにしてください。今回は小さなプログラムのため、マージモジュールさえ設定できていれば問題ありませんが、大きなプログラムの場合、開発環境では設定の一部が欠落していても気がつかないなどの問題が発生してしまいます。そういった初歩的なミスを減らすためにも必ず、テスト専用にできるだけ何も入っていない環境を用意しておくことをお勧めします。また、特定のOSだとうまく動かないといったこともあります。
このようなミスを可能な限り初期の段階ではじいておくことができれば、手戻りも少なくなります。実機でのテスト環境が最も望ましいのですが、先日Virtual PCが無償化されたことなどもあり、仮想環境の構築も手軽にできるようになってきています。より安価にテスト用の環境が作れるようになってきましたので積極的に活用するようにしましょう。
インストールおよびアンインストールがうまくいくか、修復がきちんと行なわれているかなどの確認が取れたら、アプリケーションが動作するかも確認してください。
関連付けの追加
さて、最後の機能追加として関連付けを追加します。.txtへの関連付けを行いますので、今度はアンインストールするとテキストファイルへの関連付けが消えます。インストーラへの追加作業そのものは、わずかに数行ですのでたいした作業ではありませんが、アンインストールするとテキストファイルへの関連付けが消えてしまうため、そのまま環境破壊へとつながります。新しいインストーラは、必ずテスト環境で実験を繰り返すようにしてください。
<?xml version="1.0" encoding="UTF-8"?> <Wix ...省略...> <Product ...省略...> <...省略...> <!-- ショートカットとそのアイコン --> <Shortcut Id="STEdit.exe" Directory="AppMenuFolder" Name="STEdit" LongName="適すとえでぃた" Description="適すとえでぃたを実行します" Icon="STEdit.ico" IconIndex="0" Show="normal"> <Icon Id="STEdit.ico" SourceFile="STEdit\STEdit\STEdit.ico"/> </Shortcut> <!-- 追加:関連付け --> <ProgId Id="STEdit.Document" Description="てきすと ファイル" Advertise="yes" Icon="STEditDoc.ico" IconIndex="0"> <Extension Id="txt" ContentType="text/plain" Advertise="yes"> <Verb Id="Open" Argument=""%1""/> </Extension> </ProgId> <!-- 追加:関連付け --> <...省略...> <!-- ショートカット用のフォルダ --> <Directory Id="ProgramMenuFolder"> <Directory Id="AppMenuFolder" Name="STEdit" LongName="適すとえでぃた"/> </Directory> <!-- 追加:関連付け用のドキュメントアイコン --> <Icon Id="STEditDoc.ico" SourceFile="STEdit\STEdit\textdoc.ico"/> <!-- 追加:関連付け用のドキュメントアイコン --> <...省略...> </Product> </Wix>
インストール先を変更できるようにする
プロトタイプとしては、これでも良いのですが、やはりユーザーの利便性を考慮すると、インストール先の変更は早い段階から対応しておきたいと思います。特に規模の大きなアプリケーションでは、インストール先の変更に正しく追従しきれないなどの問題が発生しうるため、この部分をきちんとフォローアップできるかどうかは重要です。最初から対応しておくと、テストも早い段階から行えるため、より安定した開発スケジュールが組めるでしょう。最初に紹介したUIを見てみると、InstallDirを使えば、インストール先の変更に対応できることが分かります。インストーラのUIもそちらに変更してみることにしましょう。
<?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2003/01/wi"> <Product ...省略...> <...省略...> <UIRef Id="WixUI_ErrorProgressText" /> <!-- 変更:InstallDir UI--> <UIRef Id="WixUI_InstallDir" /> <Property Id="WIXUI_INSTALLDIR" Value="INSTALLLOCATION" /> <!-- 変更:InstallDir UI--> </Product> </Wix>
変更点はわずかに2行です。これで、インストール先を変更できるUIシーケンスに変わります(その代わり画面遷移も若干変わってしまいますが)。InstallDir UIでは、WIXUI_INSTALLDIRプロパティを使って間接的にインストール先フォルダを指定する形になっています。そのため、ユーザーが任意のフォルダ名を使えるという利点が他のインストーラ作成ツールとは異なるところです。ただし、この設定が必要なのは、InstallDirだけという点は特筆しておく必要があるでしょう。他のUIシーケンスでは、別の方法(MSIの標準設定方法)を使ってこの部分を代用しているため、必要ない形になっていると言えます。
プロトタイプインストーラとして最低限の体裁は整ったと言えるでしょう。次回はインストーラをさらに拡張してカスタムインストールに対応させてみたいと思います。
それでは最後に、今回出てきたWiXのデータについて解説します。

(VersionNT = 502 And ServicePackLevel >= 1) Or