How To: セットアップ後に インストールしたアプリケーションを 実行する

大抵 アプリケーションのインストールを完了している時には、セットアップが完了した時に インストールされたアプリケーションをただちに開始する オプションを提供する事が 望ましい。 この how to は、デフォルト WiX UI エクスペリエンスを、チェックボックスと もしチェックボックスが チェックされていたら アプリケーションを開始する WiX カスタム アクションを インクルードして、 カスタマイズする事を 述べています。

この how to は、How To: インストーラーにファイルを追加する で 概要が示されたステップを使って ベーシックな WiX プロジェクトを 既に作成したものと 仮定しています。

Step 1: プロジェクトに extension ライブラリーを 追加する

このウォークスルーは、UI コンポーネントとカスタム アクションの為の WiX extension を 必要とします。これらの extension ライブラリーは、使用する前に プロジェクトに 追加されなければなりません。もし コマンドラインで WiX を使っているなら、以下を candle と light のコマンドラインに追加する必要があります:

-ext WixUIExtension -ext WixUtilExtension

もし Visual Studio を使っているなら、Add Reference dialog を使って extension を 追加する事ができます:

  1. ソリューション エクスプローラーでプロジェクトを右クリックして、Add Reference... を選ぶ
  2. リストから WixUIExtension.dll アセンブリを選んで、追加をクリックする
  3. リストから WixUtilExtension.dll アセンブリを選んで、追加をクリックする
  4. Add Reference dialog を閉じる

Step 2: インストーラーに UI を 追加する

WiX Minimal UI シーケンスは、オプションのチェックボックスを持つ 完了ダイアログを含む ベーシックなダイアログ セットを含んでいます。プロジェクトに シーケンスを インクルードするには、<Product> エレメント内のどこかに 以下のスニペットを追加して下さい。

<UI>
    <UIRef Id="WixUI_Minimal" />
</UI>

インストーラーの最後の画面で チェックボックスを表示するには、<Product> エレメント内のどこかで 以下のスニペットをインクルードして下さい。

<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch My Application Name" />

WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT プロパティは、スタンダードな UI シーケンスによって 提供されており、それは、セットされると、チェックボックスを表示して チェックボックス ラベルとして 指定された値を使用します。

Step 3: カスタム アクションを インクルードする

カスタム アクションは、WiX プロジェクトで <CustomAction> エレメントを使ってインクルードされています。 アプリケーションを実行する事は、WixShellExec カスタム アクションで 達成されています。 Windows Installer にカスタム アクションについて知らせ、そのプロパティをセットするには、 プロジェクトで <Product> エレメント内のどこかで 以下をインクルードして下さい:

<Property Id="WixShellExecTarget" Value="[#myapplication.exe]" />
<CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />

Property エレメントは、WixShellExecTarget を インストールされたアプリケーションの位置に セットします。WixShellExecTarget は プロパティ id で、WixShellExec カスタム アクションは 実行するファイルの位置にセットされているだろうと 期待しています。Value プロパティは、 myapplication.exe で インストールされたファイルのフルパスを調べる事を WiX に知らせる為に 特殊な文字 # を使用しています。

CustomAction エレメントは、インストーラーにアクションをインクルードします。ユニーク id 、 BinaryKey 、カスタム アクションの為のアセンブリとエントリーポイントを示す DllEntry が 与えられています。Impersonate プロパティは、Windows Installer に インストールしている ユーザーとして カスタム アクションを実行する事を知らせています。

Step 4: カスタム アクションの トリガーを引く

Step 3 でのように、単にカスタム アクションをインクルードする事は、実行させるには 足りていません。Windows Installer は、カスタム アクションの トリガーが引かれるべき時に 知らされる事も必要です。これは、ユーザーが UI ダイアログの最後のページで完了ボタンを クリックした時の アクションの実行に、それを追加する為に <Publish> エレメントを 使う事によって なされています。Publish エレメントは、Step 2 からの <UI> エレメント内で インクルードされるべきで、このようになります:

<Publish Dialog="ExitDialog"
    Control="Finish" 
    Event="DoAction" 
    Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 And Not Installed</Publish>

Dialog プロパティは、カスタム アクションが結びつくダイアログ、このケースでは ExitDialog 、 を指定しています。Control プロパティは、ダイアログの完了ボタンが カスタム アクションの トリガーを引く 事を指定しています。Event プロパティは、カスタム アクションは ボタンが クリックされた時に 実行されるべきである事を 指し示し、Value プロパティは、Step 3 で インクルードされたカスタム アクションを 指定しています。エレメントでの Condition は、 Step 2 からのチェックボックスがチェックされ アプリケーションが(削除されたり 修復されるのと 対照的に)実際にインストールされていない限り、アクションを実行する事を 防ぎます。

完全なサンプル

<?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" />

    <!-- 以下の3つのセクションは、"How To: インストーラーにファイルを追加する"トピックからのものです-->
    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFilesFolder">
            <Directory Id="APPLICATIONROOTDIRECTORY" 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>

    <Feature Id="MainApplication" Title="Main Application" Level="1">
        <ComponentRef Id="myapplication.exe" />
        <ComponentRef Id="documentation.html" />
    </Feature>

    <!-- Step 2: インストーラーに UI を 追加する / Step 4: カスタム アクションの トリガーを引く -->
    <UI>
        <UIRef Id="WixUI_Minimal" />
        <Publish Dialog="ExitDialog" 
            Control="Finish" 
            Event="DoAction" 
            Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 And Not Installed</Publish>
    </UI>
    <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch My Application Name" />

    <!-- Step 3: カスタム アクションを インクルードする -->
    <Property Id="WixShellExecTarget" Value="[#myapplication.exe]" />
    <CustomAction Id="LaunchApplication" 
        BinaryKey="WixCA" 
        DllEntry="WixShellExec"
        Impersonate="yes" />
    </Product>
</Wix>