大抵 アプリケーションのインストールを完了している時には、セットアップが完了した時に インストールされたアプリケーションをただちに開始する オプションを提供する事が 望ましい。 この how to は、デフォルト WiX UI エクスペリエンスを、チェックボックスと もしチェックボックスが チェックされていたら アプリケーションを開始する WiX カスタム アクションを インクルードして、 カスタマイズする事を 述べています。
この how to は、How To: インストーラーにファイルを追加する で 概要が示されたステップを使って ベーシックな WiX プロジェクトを 既に作成したものと 仮定しています。
このウォークスルーは、UI コンポーネントとカスタム アクションの為の WiX extension を 必要とします。これらの extension ライブラリーは、使用する前に プロジェクトに 追加されなければなりません。もし コマンドラインで WiX を使っているなら、以下を candle と light のコマンドラインに追加する必要があります:
-ext WixUIExtension -ext WixUtilExtension
もし Visual Studio を使っているなら、Add Reference dialog を使って extension を 追加する事ができます:
WiX Minimal UI シーケンスは、オプションのチェックボックスを持つ 完了ダイアログを含む ベーシックなダイアログ セットを含んでいます。プロジェクトに シーケンスを インクルードするには、<Product> エレメント内のどこかに 以下のスニペットを追加して下さい。
<UI> <UIRef Id="WixUI_Minimal" /> </UI>
インストーラーの最後の画面で チェックボックスを表示するには、<Product> エレメント内のどこかで 以下のスニペットをインクルードして下さい。
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch My Application Name" />
WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT プロパティは、スタンダードな UI シーケンスによって 提供されており、それは、セットされると、チェックボックスを表示して チェックボックス ラベルとして 指定された値を使用します。
カスタム アクションは、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 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>