WiX Toolset – 最初のプロジェクト

私は、自分自身のために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]です。

[SourceDir]の直下にもうひとつ[ProgramMenuFolder]があります。これはWindowsが管理しているメニューフォルダーで、Windows7では、[スタート]から見ることができ、
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>

error: コピーできません !!