WiXを使用してインストーラーを作成します。 パート3

今回は、 最初の記事のインストールパッケージよりも複雑なものを作成します。 インストール手順を変更し、独自のインストーラーダイアログを作成する方法を学習します。





新しいインストーラーには次の手順が含まれます。



1.ご挨拶



2.インストール方法の選択







3.インストールするコンポーネントの選択







4.ショートカットを作成する







5.すべてをインストールする準備ができました。

6.インストールプロセス

7.最後の対話



メモ帳と電卓の2つのプログラムがインストールされます。



インストーラーは、 NormalCustomFullの 3種類のインストールを提供します。 条件を設定しましょう:ユーザーが通常のインストールを選択した場合、計算機はフルインストールではなく、メモ帳と計算機をインストールし、選択したものはユーザーが選択したものをインストールする必要があります。



新しいプロジェクトを作成し、すぐにロシア語のサポートとWixUIExtensionへのリンクを追加することから始めましょう。



前の記事で、プロジェクトにWixUI_ru-ru.wxlファイルを含める必要があることを指摘しました。実際、そのような必要はありません。 ロシア語にローカライズされたファイルは、WiXの現在のバージョンに既に含まれています。 見ていなかった、悔い改めた。



今回はダイアログボックスのセットとして、 WixUI_Mondoセットを使用します。 < Product >セクションのProduct.wxsファイルの最後に、このセットへのリンクを追加します。

< Property Id ="WIXUI_INSTALLDIR" Value ="INSTALLLOCATION" ></ Property >

< UIRef Id ="WixUI_Mondo" />








次に、プロジェクトをいくつかのファイルに分割します。 < Feature >の説明を別のFeatures.wxsファイルに入れます。 また、インストールされたFiles.wxsファイル、作成されたShortcuts.wxsショートカットを記述する別のファイルを作成し、 2番目の記事で説明されているようにVariables.wxiファイルに変数を配置します。



次に、インストールするファイルを追加します。メモ帳と電卓。 メモ帳は必須要素であり、計算機はオプションであり、スクリーンショットに示すようにメモ帳コンポーネントの一部になります。



Files.wxsファイルに次のコードを追加します。

< DirectoryRef Id ="INSTALLLOCATION" FileSource ="C:\WINDOWS\system32\" DiskId ="1" >

< Component Id ="ComponentNotepad" Guid ="{7A8E49AD-DDE6-4f82-BC1D-389E2AF2B1CB}" >

< File Id ='Notepad' Name ='notepad.exe' />

</ Component >



< Component Id ="ComponentCalc" Guid ="{0564AAFC-0AC9-4b0b-8ED9-452147CCEFFA}" >

< File Id ='Calc' Name ='calc.exe' />

</ Component >

</ DirectoryRef >




* This source code was highlighted with Source Code Highlighter .








これらのコンポーネントを異なるインストールオプション( < 機能 > )に含めることができるように、2つの異なるコンポーネントの説明を作成しました。 インストールオプションを追加します。そのために、 Features.wxsファイルにコードを追加します。

< Feature Id ="FeatureNotepad" Title ="" Description =" " Level ="1" ConfigurableDirectory ="INSTALLLOCATION" >

< ComponentRef Id ="ComponentNotepad" />



< Feature Id ="FeatureCalc" Title ="" Description =" " Level ="1" >

< ComponentRef Id ="ComponentCalc" />

</ Feature >

</ Feature >




* This source code was highlighted with Source Code Highlighter .








ご覧のとおり、FeatureCalcのインストールオプションはFeatureNotepadの一部です。 は依存しているため、インストールするコンポーネントを選択するためのウィンドウに子として表示されます。

< Feature >キーパラメータには、 TitleDescriptionなどのパラメータがあります。 これらのパラメーターは、インストールするコンポーネントのツリー内のコンポーネントの名前と、コンポーネントを選択したときにウィンドウの右側に表示される説明に関与します。 もう1つの興味深い点は、 ConfigurableDirectoryパラメーターです。これは、ディレクトリの識別子を設定し、[ 参照 ]ボタンをクリックするとパスが変更されます。 この場合、これはINSTALLLOCATIONディレクトリ、つまり 製品がインストールされるもの。 ConfigurableDirectoryパラメーター値を指定しない場合、ユーザーはインストールパスを変更できません。



Product.wxsファイルのインストールオプションへのリンクを追加します。

< FeatureRef Id ="FeatureNotepad" />







[スタート]メニューにショートカットを追加し、パッケージの最初のバージョンを収集できます。 Shortcuts.wxsファイルにショートカットを追加するには、コードを挿入します。

< DirectoryRef Id ="ApplicationProgramsFolder" >

< Component Id ="ShortcutNotepad" Guid ="{29EB41BB-FCFA-4f71-B31A-9B265DA5C05D}" >

< Shortcut Id ="ShortcutNotepad"

Name =""

Description ="$(var.ProductName)"

Target ="[INSTALLLOCATION]Notepad.exe"

WorkingDirectory ="INSTALLLOCATION" />

< RemoveFolder Id ="ApplicationProgramsFolder" On ="uninstall" />

< RegistryValue Root ="HKCU"

Key ="Software\$(var.Manufacturer)\$(var.ProductName)"

Name ="installed"

Type ="integer"

Value ="1"

KeyPath ="yes" />

</ Component >



< Component Id ="ShortcutCalc" Guid ="{C050C54C-F1E9-4fb8-9179-666305ADF489}" >

< Shortcut Id ="ShortcutCalc"

Name =""

Description ="$(var.ProductName)"

Target ="[INSTALLLOCATION]Calc.exe"

WorkingDirectory ="INSTALLLOCATION" />

< RegistryValue Root ="HKCU"

Key ="Software\$(var.Manufacturer)\$(var.ProductName)"

Name ="installed"

Type ="integer"

Value ="1"

KeyPath ="yes" />

</ Component >

</ DirectoryRef >




* This source code was highlighted with Source Code Highlighter .








ショートカットの説明が追加されました。次に、適切なインストールオプションにショートカットを追加する必要があります。

< Feature Id ="FeatureNotepad" Title ="" Description =" " Level ="1" ConfigurableDirectory ="INSTALLLOCATION" >

< ComponentRef Id ="ComponentNotepad" />

< ComponentRef Id ="ShortcutNotepad" />



< Feature Id ="FeatureCalc" Title ="" Description =" " Level ="1" >

< ComponentRef Id ="ComponentCalc" />

< ComponentRef Id ="ShortcutCalc" />

</ Feature >

</ Feature >




* This source code was highlighted with Source Code Highlighter .








プロジェクトを組み立てて、何が起こったのか見てみましょう。 オプションが選択され、ファイルがインストールされますが、これは最初に計画したものとは異なります。 ライセンス契約のウィンドウがあり、削除することにしました。ショートカットを作成するウィンドウはありません。



インストールmatserウィンドウの表示順序の変更を開始します。 これを行うには、独自のダイアログウィンドウのセットを作成するか、完成したダイアログウィンドウを基礎として変更を加える必要があります。 時間を短縮するには、 WiXソースを含むアーカイブをダウンロードして解凍し、ファイルWiXUI_Mondo.wxs (src \ ext \ UIExtension \ wixlib)を見つけて 、名前をWiXUI_Wizard.wxsに変更します 。 次に、このファイルを開き、次の行を見つけます。

< UI Id ="WixUI_Mondo" >



に変更します

< UI Id WixUI_Wizard >







アセンブリ中に「 重複シンボル 'WixUI:WixUI_Mondo'が見つかりました 」というエラーが表示されないようにするために作成されました。 WixUI_Mondoという識別子を持つ要素は、プロジェクトに追加したリンクであるWixUIExtensionライブラリに既に存在します。



このファイルをプロジェクトに含めます。 リンクを変更します。

< UIRef Id ="WixUI_Mondo" />







< UIRef Id ="WixUI_Wizard" />







パッケージからライセンス契約を削除します。このため、 WixUI_Wizard.wxsファイルから行を削除します。

< Publish Dialog ="LicenseAgreementDlg" Control ="Back" Event ="NewDialog" Value ="WelcomeDlg" > 1 </ Publish >

< Publish Dialog ="LicenseAgreementDlg" Control ="Next" Event ="NewDialog" Value ="SetupTypeDlg" Order ="2" > LicenseAccepted = "1" </ Publish >








これらの行は、ライセンス契約ダイアログで「次へ」および「前へ」ボタンをクリックしたときのアクションを決定しました。



行を変更します。

< Publish Dialog ="WelcomeDlg" Control ="Next" Event ="NewDialog" Value ="LicenseAgreementDlg" > 1 </ Publish >







< Publish Dialog ="WelcomeDlg" Control ="Next" Event ="NewDialog" Value ="SetupTypeDlg" > 1 </ Publish >





この行は、ようこそウィンドウで[次へ]をクリックしたときのアクションを設定します。 アクションを変更し、[次へ]をクリックしたときにインストールタイプ選択ウィンドウ(SetupTypeDlg)の表示を割り当てました。



行:

< Publish Dialog ="SetupTypeDlg" Control ="Back" Event ="NewDialog" Value ="LicenseAgreementDlg" > 1 </ Publish >





に変更

< Publish Dialog ="SetupTypeDlg" Control ="Back" Event ="WelcomeDlg" Value ="LicenseAgreementDlg" > 1 </ Publish >







この行は、インストールタイプ選択ウィンドウで[戻る]ボタンをクリックしたときのアクションを設定します。 アクションを変更し、[戻る]ボタンを押してウェルカムウィンドウに戻るように設定しました。



私たちがしたことは、ライセンス契約のあるウィンドウの言及を削除し、「ジャンプ」して、「戻る」ボタンと「次へ」ボタンの反応を無効にすることだけでした。 ライセンス契約ウィンドウの「戻る」ボタンと「次へ」ボタンの反応を決定する行は、ようこそダイアログの「次へ」ボタンと「戻る」ボタンのアクションをオーバーライドし、インストール方法を選択しても削除できませんでした。インストールプロセスからライセンスのダイアログをすでに除外しました。



ここでインストールパッケージをアセンブルして実行すると、以前と同じように表示されますが、ライセンス契約ウィンドウは表示されません。



独自のショートカットダイアログを作成します。 新しいダイアログボックスの外観を定義する新しいファイルWixUI_Shortcuts.wxsをプロジェクトに追加します。

<? xml version ="1.0" encoding ="UTF-8" ? >



< Wix xmlns ="http://schemas.microsoft.com/wix/2006/wi" >

< Fragment >

< UI >

< Dialog Id ="ShortcutsDlg" Width ="370" Height ="270" Title ="!(loc.WelcomeDlg_Title)" >

< Control Id ="Next" Type ="PushButton" X ="248" Y ="243" Width ="56" Height ="17" Default ="yes" Text ="!(loc.WixUINext)" />

< Control Id ="Back" Type ="PushButton" X ="192" Y ="243" Width ="56" Height ="17" Text ="!(loc.WixUIBack)" />

< Control Id ="Cancel" Type ="PushButton" X ="304" Y ="243" Width ="56" Height ="17" Cancel ="yes" Text ="!(loc.WixUICancel)" >

< Publish Event ="SpawnDialog" Value ="CancelDlg" > 1 </ Publish >

</ Control >



< Control Id ="ShortcutDesktop"

Type ="CheckBox"

Height ="18"

Width ="295"

X ="26" Y ="58"

Text =" "

Property ="SHORTCUT_DESKTOP"

CheckBoxValue ="1" />

< Control Id ="ShortcutProgramMenu"

Type ="CheckBox"

Height ="18"

Width ="295"

X ="26" Y ="79"

Text =" "

Property ="SHORTCUT_PROGRAMMENU"

CheckBoxValue ="1" />



< Control Id ="BannerBitmap" Type ="Bitmap" X ="0" Y ="0" Width ="370" Height ="44" TabSkip ="no" Text ="!(loc.CustomizeDlgBannerBitmap)" />

< Control Id ="BannerLine" Type ="Line" X ="0" Y ="44" Width ="370" Height ="2" />

< Control Id ="BottomLine" Type ="Line" X ="0" Y ="234" Width ="370" Height ="2" />

< Control Id ="Title" Type ="Text" X ="15" Y ="6" Width ="210" Height ="15" Transparent ="yes" NoPrefix ="yes" Text ="!(loc.CustomizeDlgTitle)" />

</ Dialog >

</ UI >

</ Fragment >

</ Wix >




* This source code was highlighted with Source Code Highlighter .








ダイアログを作成するには2つの方法があります。コードを編集して自分でダイアログを作成する方法、またはSharp Developなどのビジュアルエディタを使用する方法です。 SetupTypeDlg.wxs (src \ ext \ UIExtension \ wixlib)ダイアログを基本にして、余分なものを削除し、不足しているものを追加しました。



インストールプロセスに新しいダイアログを含めます。 新しいダイアログは、インストールするコンポーネントを選択するダイアログの後、または[標準]ボタンまたは[完全]ボタンをクリックした場合はインストールの種類を選択するダイアログの後に表示する必要があります。 WixUI_Wizard.wxsファイルを開き、次を追加します。

< Publish Dialog ="ShortcutsDlg" Control ="Back" Event ="NewDialog" Value ="CustomizeDlg" > 1 </ Publish >

< Publish Dialog ="ShortcutsDlg" Control ="Next" Event ="NewDialog" Value ="VerifyReadyDlg" > 1 </ Publish >




* This source code was highlighted with Source Code Highlighter .








次に、ダイアログSetupTypeDlgCustomizeDlgVerifyReadyDlgでボタンクリックに対する応答を再定義する必要があります。 すべて一緒にこのようになります(変更されていない行は表示しません):

<!-- -->

< Publish Dialog ="SetupTypeDlg" Control ="TypicalButton" Event ="NewDialog" Value ="ShortcutsDlg" > 1 </ Publish >

<!-- -->

< Publish Dialog ="SetupTypeDlg" Control ="CompleteButton" Event ="NewDialog" Value ="ShortcutsDlg" > 1 </ Publish >



< Publish Dialog ="CustomizeDlg" Control ="Next" Event ="NewDialog" Value ="ShortcutsDlg" > 1 </ Publish >



<!-- -->

< Publish Dialog ="ShortcutsDlg" Control ="Back" Event ="NewDialog" Value ="CustomizeDlg" Order ="1" >

WixUI_InstallMode = "InstallCustom"

</ Publish >

<!-- -->

< Publish Dialog ="ShortcutsDlg" Control ="Back" Event ="NewDialog" Value ="SetupTypeDlg" Order ="2" >

WixUI_InstallMode = "InstallTypical" OR WixUI_InstallMode = "InstallComplete"

</ Publish >



< Publish Dialog ="VerifyReadyDlg" Control ="Back" Event ="NewDialog" Value ="ShortcutsDlg" > 1 </ Publish >

< Publish Dialog ="VerifyReadyDlg" Control ="Back" Event ="NewDialog" Value ="CustomizeDlg" Order ="1" >

WixUI_InstallMode = "Change"

</ Publish >

< Publish Dialog ="VerifyReadyDlg" Control ="Back" Event ="NewDialog" Value ="MaintenanceTypeDlg" Order ="2" >

WixUI_InstallMode = "Repair" OR WixUI_InstallMode = "Remove"

</ Publish >




* This source code was highlighted with Source Code Highlighter .








収集して起動し、新しいウィンドウを表示します。 1つの問題は、チェックボックスが立っているかどうかです。デスクトップのショートカットは作成されず、とにかく[スタート]メニューに作成されます。 つまり 反応なし。 すべては、これらのチェックボックスに何も結び付けていないためです。 最初に、 2つの新しいプロパティをProduct.wxsファイル追加します。

< Property Id ="SHORTCUT_PROGRAMMENU" > 1 </ Property >

< Property Id ="SHORTCUT_DESKTOP" > 1 </ Property >








チェックボックスには同じプロパティがあります: Property =“ SHORTCUT_DESKTOP”およびProperty =“ SHORTCUT_PROGRAMMENU” 、したがって接続。 ダイアログボックスのチェックボックスの状態を変更すると、 プロパティの値も変更されます。 次に、ショートカットとプロパティ値の作成をリンクする必要があります。 これは非常に簡単です。 条件がコンポーネントに追加されます。

< Condition > SHORTCUT_PROGRAMMENU </ Condition >







< Condition >キー内の式がtrueの場合、コンポーネントがインストールされます。



すべて一緒にこのようになります:

< Component Id ="ShortcutNotepad" Guid ="{29EB41BB-FCFA-4f71-B31A-9B265DA5C05D}" >

< Shortcut Id ="ShortcutNotepad"

Name =""

Description ="$(var.ProductName)"

Target ="[INSTALLLOCATION]Notepad.exe"

WorkingDirectory ="INSTALLLOCATION" />

< RemoveFolder Id ="ApplicationProgramsFolder" On ="uninstall" />

< RegistryValue Root ="HKCU" Key ="Software\$(var.Manufacturer)\$(var.ProductName)" Name ="installed" Type ="integer" Value ="1" KeyPath ="yes" />

< Condition > SHORTCUT_PROGRAMMENU </ Condition >

</ Component >




* This source code was highlighted with Source Code Highlighter .








ShortcutCalcコンポーネントに< 条件 >を追加することを忘れないでください。



あとは、デスクトップショートカットを追加するだけです。 Products.wxsファイルに新しいディレクトリを追加します

< Directory Id ="DesktopFolder" Name ="Desktop" />









Shortcuts.wxsファイル内のショートカットの説明:

< DirectoryRef Id ="DesktopFolder" >

< Component Id ="DesktopShortcutNotepad" Guid ="{9746557B-59B1-46de-B369-5F454A946698}" >

< RegistryKey Root ="HKCU" Key ="YourAppKey\PossibleSubKey" Action ="createAndRemoveOnUninstall" >

< RegistryValue Name ="AnyValueName" Value ="1" Type ="integer" KeyPath ="yes" />

</ RegistryKey >

< Shortcut Id ="DesktopShortcut" Directory ="DesktopFolder" Name ="" Target ="[INSTALLLOCATION]Notepad.exe" />

< Condition > SHORTCUT_DESKTOP </ Condition >

</ Component >



< Component Id ="DesktopShortcutCalc" Guid ="{B4908FF0-96C6-4f12-8E64-BC366E1147E1}" >

< RegistryKey Root ="HKCU" Key ="YourAppKey\PossibleSubKey" Action ="createAndRemoveOnUninstall" >

< RegistryValue Name ="AnyValueName" Value ="1" Type ="integer" KeyPath ="yes" />

</ RegistryKey >

< Shortcut Id ="DesktopShortcut" Directory ="DesktopFolder" Name ="" Target ="[INSTALLLOCATION]Calc.exe" />

< Condition > SHORTCUT_DESKTOP </ Condition >

</ Component >

</ DirectoryRef >




* This source code was highlighted with Source Code Highlighter .








Features.wxsファイルにショートカットリンクを追加します。

< Feature Id ="FeatureNotepad" Title ="" Description =" " Level ="1" ConfigurableDirectory ="INSTALLLOCATION" >

< ComponentRef Id ="ComponentNotepad" />

< ComponentRef Id ="ShortcutNotepad" />

< ComponentRef Id ="DesktopShortcutNotepad" />



< Feature Id ="FeatureCalc" Title ="" Description =" " Level ="1" >

< ComponentRef Id ="ComponentCalc" />

< ComponentRef Id ="ShortcutCalc" />

< ComponentRef Id ="DesktopShortcutCalc" />

</ Feature >

</ Feature >




* This source code was highlighted with Source Code Highlighter .








ほぼ完了。 通常のインストールではノートブックのみをインストールする必要があり、もう1つの条件を満たす必要があります。 この条件を満たすには、電卓のインストールを担当する< Feature >< Condition >を追加します。

< Condition Level ="0" > INSTALLLEVEL=3 </ Condition >







< Feature >内で< Condition >を使用する場合、 Levelパラメーターが必要です。 条件が満たされた場合、 レベル自体を設定します</ Feature > この場合、 INSTALLLEVEL = 3であり 、ユーザーが通常インストールを選択した場合、値3がINSTALLLEVELプロパティに設定されます。 どうやって見つけたの? インストールの種類SetupTypeDlg.wxsを選択するためのダイアログのソースを確認しましたところで 、たくさんの興味深いことがあります)

< Publish Event ="SetInstallLevel" Value ="3" > 1 </ Publish >







Levelパラメーターの値0は、インストールオプションが無効になることを意味します。



組み立て、起動、インストールを行います。



プロジェクトのソースはここからダウンロードできます



以上です。 次回は、 CustomActionsについてお話します。これは、インストールパッケージにアクションを追加できる非常に興味深いものです。



All Articles