How To: スタートメニューに ショートカットを作成する

アプリケーションをインストールしている時、プログラムの開始ポイントを提供する為に ユーザーの スタート メニューに ショートカットを置く事が 共通の必要条件です。この how to は、 スタート メニューに どのようにショートカットを作成するかを ざっと見ます。 How To: インストーラーに ファイルを追加する で述べられている コンセプトに基づいた WiX ソース ファイルを持っているものと 仮定します。

Step 1: ディレクトリー構造を 定義する

スタート メニュー ショートカットは、普通のアプリケーション ファイルとは 違ったディレクトリーに インストールされているので、インストーラーのディレクトリー構造への変更が 必要です。 以下の WiX fragment は、TARGETDIR ID を持つ <Directory> エレメントの中に置かれるべきであり、 スタート メニューの為のディレクトリー構造情報を追加します:

<Directory Id="ProgramMenuFolder">
    <Directory Id="ApplicationProgramsFolder" Name="My Application Name"/>
</Directory>

ProgramMenuFolder Id は、ターゲット マシンでのスタート メニュー フォルダーを指す スタンダードな Windows Installer property です。2番目の Directory エレメントは、スタート メニューに "My Application Name" というサブ フォルダーを作成し、後で WiX プロジェクトで使用する為の id を 与えています。

Step 2: インストーラー パッケージに ショートカットを 追加する

ショートカットは、インストーラーに 3つのエレメントを使って 追加されています: インストールの 最小要素のユニットを指定する <Component> エレメント、 インストールされるべきショートカットを指定する <Shortcut> エレメント、 アプリケーションがアンインストールされる時に 適切なクリーンアップを保証する <RemoveFolder> エレメントです。

以下のサンプルは、スタート メニュー ショートカットを作成する為に Step 1 で定義された ディレクトリー構造を使っています。

<DirectoryRef Id="ApplicationProgramsFolder">
    <Component Id="ApplicationShortcut" Guid="PUT-GUID-HERE">
        <Shortcut Id="ApplicationStartMenuShortcut" 
                  Name="My Application Name"
                  Description="My Application Description"
                  Target="[APPLICATIONROOTDIRECTORY]MyApplication.exe"
                  WorkingDirectory="APPLICATIONROOTDIRECTORY"/>
        <RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/>
        <RegistryValue Root="HKCU" Key="Software\Microsoft\MyApplicationName" Name="Installed" Type="integer" Value="1" KeyPath="yes"/>
    </Component>
</DirectoryRef>

<DirectoryRef> エレメントは、Step 1 で作成されたディレクトリー構造を参照する為に 使われています。 ApplicationProgramsFolder ディレクトリーを参照する事によって、ショートカットは ユーザーのスタート メニューの "My Application Name" の中に インストールされます。

DirectoryRef の下は、ショートカットをインストールする為に使われているエレメントをまとめる ただ1つのコンポーネントです。最初のエレメントはショートカットで、スタート メニューに 実際のショートカットを作成します。id アトリビュートは、ショートカットの為のユニーク id です。 Name アトリビュートは、スタート メニューに表示されるテキストです。Description は、 追加の アプリケーション説明の為の オプション アトリビュートです。Target アトリビュートは、 ディスク上で実行する 実行ファイルを指しています。 ディレクトリー構造で前もって定義された APPLICATIONROOTDIRECTORY property が どのように使われるかに 注意しなさい。WorkingDirectory アトリビュートは、 ショートカットの 作業ディレクトリーをセットします。

ショートカットにオプションのアイコンをセットするには、最初に <Icon> エレメントを使って インストーラーにアイコンをインクルードして、Shortcut エレメントの Icon アトリビュートで それを参照する 必要があります。

ショートカットの作成に加えて、コンポーネントは 他に2つ 重要なピースを含んでいます。 最初は RemoveFolder エレメントで、これは アプリケーションをアンインストールする時に ApplicationProgramsFolder がスタート メニューから 正しく削除される事を 保証します。 2番目は、Installed で アプリケーションがインストールされている事を示す レジストリー エントリーを作成します。カレント ユーザーの為に アドバタイズドではない ショートカットを インストールする時に ショートカットはコンポーネント用 KeyPath として使う事ができないので、 これが必要です。レジストリー エントリー作成における より多くのインフォメーションについては、 How To: インストール中に レジストリー エントリーを 書く を見て下さい。

Step 3: Windows Installer に ショートカットをインストールする事を 知らせる

ディレクトリー構造の定義と インストーラーにパッケージする ファイルの一覧 作成の後、最終段階は、 Windows Installer に 実際にショートカットをインストールする事を 知らせる事です。<Feature> エレメントは これをするために使われています。以下のスニペットは、ショートカット コンポーネントへの 参照を追加し、親の Feature エレメントの中に挿入されなければなりません。

<ComponentRef Id="ApplicationShortcut" />

<ComponentRef> エレメントは、Step 2 で作成されたコンポーネントを id アトリビュート経由で 参照する為に 使われています。

完全なサンプル

以下は、上のコンセプトを使用している 完全なサンプルです。この例は、インストーラーを 生成する為に、WiX プロジェクトに挿入、コンパイルや、コマンドラインからコンパイル・リンク する事ができます。

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="*" UpgradeCode="PUT-GUID-HERE" Version="1.0.0.0" Language="1033" Name="My Application Name" Manufacturer="My Manufacturer Name">
        <Package InstallerVersion="300" Compressed="yes"/>
        <Media Id="1" Cabinet="myapplication.cab" EmbedCab="yes" />

	<Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="APPLICATIONROOTDIRECTORY" Name="My Application Name"/>
            </Directory>
	    <!-- Step 1: ディレクトリー構造を 定義する -->
	    <Directory Id="ProgramMenuFolder">
	        <Directory Id="ApplicationProgramsFolder" Name="My Application Name"/>
	    </Directory>
        </Directory>

        <DirectoryRef Id="APPLICATIONROOTDIRECTORY">
            <Component Id="myapplication.exe" Guid="PUT-GUID-HERE">
                <File Id="myapplication.exe" Source="MySourceFiles\MyApplication.exe" KeyPath="yes" Checksum="yes"/>
            </Component>
            <Component Id="documentation.html" Guid="PUT-GUID-HERE">
                <File Id="documentation.html" Source="MySourceFiles\documentation.html" KeyPath="yes"/>
            </Component>
        </DirectoryRef>

	<!-- Step 2: インストーラー パッケージに ショートカットを 追加する -->
	<DirectoryRef Id="ApplicationProgramsFolder">
	    <Component Id="ApplicationShortcut" Guid="PUT-GUID-HERE">
		<Shortcut Id="ApplicationStartMenuShortcut" 
Name="My Application Name"
Description="My Application Description"
Target="[APPLICATIONROOTDIRECTORY]MyApplication.exe" WorkingDirectory="APPLICATIONROOTDIRECTORY"/> <RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/> <RegistryValue Root="HKCU" Key="Software\Microsoft\MyApplicationName" Name="Installed" Type="integer" Value="1" KeyPath="yes"/>
</
Component> </DirectoryRef> <Feature Id="MainApplication" Title="Main Application" Level="1"> <ComponentRef Id="myapplication.exe" /> <ComponentRef Id="documentation.html" /> <!-- Step 3: WiX に ショートカットをインストールする事を 知らせる --> <ComponentRef Id="ApplicationShortcut" /> </Feature> </Product> </Wix>