私は、自分自身のためにWiXを勉強していて、人様にお教えするような力も立場でもありません。
ただ、[WiX Toolset]を習得すれば、InstallShieldやInstallAwareのようなセットアップ用ソフトを購入しなくても、大抵のことはできそうだし、それにしては、WiXについて特に日本語の解説が非常に少ないので、自分が勉強の途中で引っかかり、解決したことを報告させてもらえば、多少とも誰かのお役に立つかなと思って、勉強進行形をご報告させていただきたいと思います。
現状では、まとまったWiXの解説書としてはNick Ramirezの本が唯一ですが、多分これで十分だろうと考えています。記述は平易ですので、本格的にWiXを勉強したい人は、是非じっくりをお読みになることをお勧めします。
WiX3.6: A Developer’s Guide to Windows Install XML (PACKT 2012 以下Guideといいます)
WiX Cookbook (PACKT 2015 以下CookBookといいます)
PACKTのサイトにアクセスしユーザ登録すれば、これらの本のサンプルコードが入手できます。
以下にGuideで最初に取り上げられているコードをご紹介しまします。このプログラムは次の仕事をします。
ターゲットコンピュータの[Program Files]フォルダーの下に、[Awesome Software]というフォルダーを作り、この中に[InstallMe.txt]というファイルをインストールする
また、スタート・メニューに同じく[Awesome Software]フォルダーを作り、この中に上の[InstallMe.txt]ファイルへのショートカットと、アンインストールのショートカットを作り、レジストリー登録の仕組みを設定する
アンインストールでは、インストールしたソフトを少しも残さないで完全に削除する
このプログラムをすべて説明することはできません。WiXに興味ある人は、ご自身で開発環境を作って実行してみてください。ポイントだけを説明します。
まず、[Product][Package]はお約束です。[Product]の[Id]および[UpdateCode]は必須で、全世界でユニークなGUIDをつけなければいけません。
GUIDは[WiX Edit]の中でもVSの中でも簡単に生成できますので、自分の開発環境で再設定しなくてはいけません。
また出荷時に設定したこれらの値をその後変更してはいけません。アンインストールやインストールの変更で支障が出てきます。
[CodePage]=932は、文字コードとしてShfit_JISを使うこと、[Language]=1041は、インストール途中の案内に日本語を使うことを宣言しています。インストールでは、「何を」「どこへ」が主要な作業です。「何を」はコンポーネントの定義であり、「どこへ」はディレクトリの定義です。
下の画像は、[WiX Edit]の[Files]メニューを開いたところです。
左ペインの上の方に文書ファイルの形をしたアイコンがTree状に配置されています。これはターゲットコンピュータのディレクトリ構造を表示しています。
左ペインの一番上に[SourceDir]があります。右のペインで見るとIdは[TARGETDIR]でNameは[SourceDir]です。
[TARGETDIR]は予約語で、少しわかりにくい概念ですが、要は「ターゲットコンピュータのディレクトリだ」と理解すればいいと思います。Nameは左ペインのアイコンの名前になっています。SourceDirの下に[ProgramFilesFolder]があります。これも予約語でWindowsに必ず存在する[Program Files]フォルダーです。この下に[Awasome Software]がありますが、[Program FIles]フォルダーの下に[Awasome Software]を作ることを意味しています。
この[Awasome Software]のIdは[MyProgramDir]で、Nameは[Awesome Software]です。
Windows8では、[アプリ]画面でみることができます。 [ProgramMenuFolder]の下に[Awesome Software]というディレクトリを作ります。Idが[MyShortcutsDir]、Nameが[Awesome Software]です。一般にNameはターゲットコンピュータで使われる名前で、IdはWixで使われる一意の名前です。
さてその下に、ファイルの形だが矢印のついたアイコンがあります。これはReferrence(参照)を表現しています。
[MyProgramDir]Referrenceは、どこかで宣言された[MyProgramDir]を参照するという意味です。[MyProgramDir]は[ProgramFilesFolder]直下の[Awasome Software]のIdです。 [MyProgramDir Referrence]の中には[CMP_InstallMeTXT]コンポーネントが定義されています。この中には、[Source]=InstallMe.txtが宣言されていますので、インストールではこのファイルを[MyProgramDir]にコピーすることを意味します。同様に、[MyShortcutsDir Reference]では、[ProgramMenuFolder]のに入れるべきショートカットを宣言しています。
下にこのプログラムのコードを転記します。WiX Editで編集すれば、下のコードが得られますし、VS等でこのコードを編集すれば、WiX Editのグラフィカル画面が変更されます。
<?xml version="1.0" encoding="utf-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" RequiredVersion="3.6.3303.0"> <Product Id="3E786878-358D-43AD-82D1-1435ADF9F6EA" Name="Awesome Software" Language="1041" Version="1.0.0.0" Manufacturer="Awesome Company" UpgradeCode="B414C827-8D81-4B4A-B3B6-338C06DE3A11" Codepage="932"> <Package InstallerVersion="301" Compressed="yes" InstallScope="perMachine" Manufacturer="Awesome Company" Description="Installs Awesome Software" Keywords="Practice,Installer,MSI" Comments="(c) 2012 Awesome Company" /> <MediaTemplate EmbedCab="yes" /> <!--Directory structure--> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> <Directory Id="MyProgramDir" Name="Awesome Software" /> </Directory> <Directory Id="ProgramMenuFolder"> <Directory Id="MyShortcutsDir" Name="Awesome Software" /> </Directory> </Directory> <!--Components--> <DirectoryRef Id="MyProgramDir"> <Component Id="CMP_InstallMeTXT" Guid="E8A58B7B-F031-4548-9BDD-7A6796C8460D"> <File Id="FILE_InstallMeTXT" Source="InstallMe.txt" KeyPath="yes" /> </Component> </DirectoryRef> <!--Start Menu Shortcuts--> <DirectoryRef Id="MyShortcutsDir"> <Component Id="CMP_DocumentationShortcut" Guid="33741C82-30BF-41AF-8246-44A5DCFCF953"> <Shortcut Id="DocumentationStartMenuShortcut" Name="Awesome Software Documentation" Description="Read Awesome Software Documentation" Target="[MyProgramDir]InstallMe.txt" /> <Shortcut Id="UninstallShortcut" Name="Uninstall InstallPractice" Description="Uninstalls Awesome Software" Target="[System64Folder]msiexec.exe" Arguments="/x [ProductCode]" /> <RemoveFolder Id="RemoveMyShortcutsDir" On="uninstall" /> <RegistryValue Root="HKCU" Key="SoftwareMicrosoftAwesomeSoftware" Name="installed" Type="integer" Value="1" KeyPath="yes" /> </Component> </DirectoryRef> <!--Features--> <Feature Id="ProductFeature" Title="Main Product" Level="1"> <ComponentRef Id="CMP_InstallMeTXT" /> <ComponentRef Id="CMP_DocumentationShortcut" /> </Feature> <UI /> <UIRef Id="WixUI_Minimal" /> </Product> </Wix>