Tutorial Installer: Kustomisasi dan Install Conditions (3 dari 5)

WiX Toolset

Tutorial installer ini membahas cara membuat installer aplikasi menggunakan WiX Toolset. Membuat installer merupakan tahap akhir dari siklus pembuatan aplikasi. Setelah program aplikasi selesai dibuat dan diuji, tahap selanjutnya adalah membuat paket instalasi untuk didistribusikan kepada pengguna akhir/konsumen.

Project artikel ini dapat diakses pada repositori Kodesiana pada https://github.com/Kodesiana/WixInstallerExample. Artikel ini merupakan artikel bersambung dengan urutan sebagai berikut.

  1. Tutorial Installer: Instalasi WiX Toolset (1 dari 5)
  2. Tutorial Installer: Membuat Installer Aplikasi (2 dari 5)
  3. Tutorial Installer: Kustomisasi dan Install Conditions (3 dari 5) [artikel ini]
  4. Tutorial Installer: Membuat Bootstrapper Installer (4 dari 5)
  5. Tutorial Installer: Finalisasi Setup Project/Finishing (5 dari 5)

Kustomisasi Installer

Pada tutorial kedua, Anda telah berhasil membuat setup yang dapat menginstall aplikasi ke komputer, tetapi masih belum dapat melakukan pengecekan apakah program tertentu seperti .NET Framework, SQL Server, dan Crystal Report telah terpasang atau belum. Selain itu, Anda mungkin ingin menampilkan lisensi aplikasi, menambahkan checkbox untuk memulai aplikasi setelah aplikasi berhasil di install, atau mengubah ikon aplikasi pada Control Panel.

Menambahkan Perjanjian Lisensi pada Installer

Untuk menambahkan tampilan persetujuan lisensi pada installer, Anda harus membuat file teks lisensi dalam format RTF. Penulis menyarankan untuk menggunakan aplikasi bawaan Windows WordPad untuk membuat dokumen RTF. Contoh dokumen lisensi menggunakan WordPad:

Edit Lisensi Menggunakan WordPad
Edit Lisensi Menggunakan WordPad

Buka file Product.wxs kemudian tambahkan kode berikut.

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <?include "RelativePath.wxi" ?>
  <Product Id="*" Name="Wiyata Bhakti" Language="1033" Version="1.0.0.0" Manufacturer="Fahmi Noor Fiqri" UpgradeCode="{B3559FC8-4392-4CC4-A74D-E39A19B2E827}">
    <!-- Package -->
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
    <Media Id="1" Cabinet="app.cab" EmbedCab="yes" />

    <!-- Properties -->
    <WixVariable Id="WixUILicenseRtf" Value="$(var.SourceDir)\license.rtf" />

    <!-- Install Conditions -->
    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />

    <!-- Features to install -->
    <Feature Id="ProductFeature" Title="Wiyata Bhakti Installer" Level="1">
      <ComponentGroupRef Id="AppFiles" />
      <ComponentGroupRef Id="DatabaseFiles" />
      <ComponentGroupRef Id="AppShortcuts" />
    </Feature>

    <!-- UI -->
    <UI>
      <UIRef Id="WixUI_Minimal" />
    </UI>
  </Product>
</Wix>

Penjelasan:

  1. Baris 10, menandakan lokasi file license.rtf yang akan digunakan.
  2. Baris 23-25, menandakan WiX untuk menggunakan dialog Minimal.

Untuk menggunakan kode di atas, tambahkan referensi ke WixUIExtension.dll dengan cara klik kanan pada project kemudian klik Add > Reference…. Pada tab Browse, pindah ke folder C:\Program Files (x86)\WiX Toolset v3.11\bin. Pilih WixUIExtension.dll kemudian klik Add dan klik OK.

Add Reference ke Project WiX
Add Reference ke Project WiX

Mengubah Ikon Program pada Control Panel

Untuk menambahkan ikon pada Control Panel, caranya mirip dengan cara untuk menambahkan lisensi pada setup. Buka file Product.wxs kemudian tambahkan kode berikut.

<Icon Id="icon.ico" SourceFile="$(var.SourceDir)\WiyataBhakti-icon.ico" />
<Property Id="ARPPRODUCTICON" Value="icon.ico" />

Penjelasan:

  1. Baris 1, menandakan lokasi ikon yang akan digunakan dengan Id icon.ico yang berlokasi pada SourceDir\WiyataBhakti-icon.ico.
  2. Baris 2, mengubah properti APPRODUCTION menjadi icon.ico.

CheckBox untuk Membuka Program Setelah Install

Untuk menambahkan checkbox untuk membuka aplikasi setelah instalasi, buka file Product.wxs kemudian tambahkan kode berikut.

<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Buka Wiyata Bhakti" />
<Property Id="WixShellExecTarget" Value="[#WiyataBhakti.App.exe]" />

<!-- UI -->
<UI>
  <UIRef Id="WixUI_Minimal" />
  <Publish Dialog="ExitDialog" Control="Finish" Event="DoAction" Value="LaunchApplication">
    WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 AND NOT Installed
  </Publish>
</UI>

<!-- Custom Actions -->
<CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />

Penjelasan:

  1. Baris 1, mengubah teks pada checkbox untuk membuka aplikasi setelah install.
  2. Baris 2, menandakan target program yang akan dibuka setelah instalasi, pada contoh ini file WiyataBhakti.App.exe.
  3. Baris 6-8, menambahkan checkbox melalui predefined template dari WixUI_Minimal.
  4. Baris 13, menandakan custom action untuk membuka target aplikasi melalui Wix extension.

Kustomisasi Install Conditions

Install Conditions merupakan definisi beberapa kondisi yang harus dipenuhi sebelum aplikasi dapat di install pada komputer. Misalkan program Anda membutuhkan .NET Framework dengan versi tertentu untuk dapat digunakan, maka installer akan mengecek apakah versi .NET Framework tersebut sudah ada pada komputer atau belum. Apabila .NET Framework dengan versi tersebut belum dipasang, maka instalasi dibatalkan.

Untuk melakukan pengecekan, penulis biasanya menggunakan elemen <RegistrySearch> untuk menentukan apakah suatu program sudah terpasang atau belum. Dengan menggunakan gabungan <Property> dan <RegistrySearch> kita dapat menentukan apakah suatu program sudah di install atau belum sebelum melanjutkan proses instalasi.

Mengecek .NET Framework 4.5

Untuk mengecek versi .NET Framework, kita dapat mengunakan ekstensi WixNetFxExtension.dll. Dengan menggunakan ekstensi ini kita tidak perlu membuat <RegistrySearch> untuk menentukan apakah .NET Framework sudah terpasang atau belum. Kita hanya perlu mereferensikan properti dari WixNetFxExtension.dll.

Tambahkan referensi WixNetFxExtension.dll kemudian, bah elemen <Wix> pada file Product.wxs seperti contoh di bawah ini.

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

Penjelasan: menambahkan namespace prefix ke extension WixNetFxExtension.dll. Setelah Anda mengubah elemen <Wix>, tambahkan kode di bawah ini.

<!-- Properties -->
<PropertyRef Id="NETFRAMEWORK45" />

<!-- Install Conditions -->
<Condition Message="This application requires .NET Framework 4.5. Please install the .NET Framework then run this installer again.">
  <![CDATA[Installed OR NETFRAMEWORK45]]>
</Condition>

Penjelasan:

  1. Baris 2, membuat referensi ke properti NETFRAMEWORK45 dari library WixNetFxExtension.dll.
  2. Baris 5-7, membuat kondisi untuk mengecek .NET Framework berdasarkan properti NETFRAMEWORK45.

Mengecek SQL Server LocalDB 2014

Sama halnya dengan cara untuk mengecek .NET Framework, untuk mengecek program lain sudah terpasang atau belum pada komputer dapat dilakukan menggunakan elemen <Property> dan <RegistrySearch>. Bedanya adalah untuk program selain yang didukung oleh WiX, kita harus membuat sendiri sistem pendeteksianya.

Buat Installer File baru dengan nama Registry.wxs. Ubah isi file tersebut dengan kode di bawah ini.

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
	<Fragment>
	  <!-- Prerequiretes Search -->
	  <Property Id="MSSQLSERVERLOCALDB32">
	    <RegistrySearch Id="MSSQLSERVERLOCALDB32" Key="SOFTWARE\Microsoft\Microsoft SQL Server 2014 Redist\SqlLocalDB\CurrentVersion" Name="Version" Root="HKLM" Type="raw" Win64="no" />
	  </Property>
	  <Property Id="MSSQLSERVERLOCALDB64">
	    <RegistrySearch Id="MSSQLSERVERLOCALDB64" Key="SOFTWARE\Microsoft\Microsoft SQL Server 2014 Redist\SqlLocalDB\CurrentVersion" Name="Version" Root="HKLM" Type="raw" Win64="yes" />
	  </Property>
	</Fragment>
</Wix>

Penjelasan:

  1. Baris 5 dan 8, membuat properti untuk menampung value hasil pencarian registry.
  2. Baris 6, mencari registry pada Key dan Root yang sudah ditentukan dengan versi registry 32-bit.
  3. Baris 9, mencari registry pada Key dan Root yang sudah ditentukan dengan versi registry 64-bit. Dua versi pencarian registry ini dilakukan karena MSI yang dibuat merupakan 32-bit dan Windows memiliki versi 32-bit dan 64-bit. Untuk menghindari Registry Virtualization, maka menggunakan dua definisi pencarian harus dilakukan.

Buka file Product.wxs kemudian tambahkan kode berikut.

<Condition Message="This application requires SQL Server 2014 LocalDB. Please install the SQL Server 2014 LocalDB then run this installer again.">
   <![CDATA[Installed OR MSSQLSERVERLOCALDB32 OR MSSQLSERVERLOCALDB64]]>
</Condition>

Penjelasan: Membuat kondisi untuk mengecek SQL Server LocalDB 2014 berdasarkan properti MSSQLSERVER32 dan MSSQLSERVER64.

Mengecek SAP Crystal Report Runtime

Cara mengecek Crystal Report juga sama dengan cara untuk mengecek SQL Server LocalDB 2014. Perbedaannya adalah path registry yang dicari. Buka kembali file Registry.wxs, kemudian tambahkan kode berikut.

<Property Id="SAPBUSINESSOBJECT32">
    <RegistrySearch Id="SAPBUSINESSOBJECT32" Key="SOFTWARE\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Shared" Name="BINDIR" Root="HKLM" Type="raw" Win64="no" />
</Property>
<Property Id="SAPBUSINESSOBJECT64">
    <RegistrySearch Id="SAPBUSINESSOBJECT64" Key="SOFTWARE\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Shared" Name="BINDIR" Root="HKLM" Type="raw" Win64="yes" />
</Property>

Penjelasan:

  1. Baris 1 dan 4, membuat property untuk menampung value hasil pencarian registry.
  2. Baris 2, mencari registry pada Key dan Root yang sudah ditentukan dengan versi registry 32-bit.
  3. Baris 5, mencari registry pada Key dan Root yang sudah ditentukan dengan versi registry 64-bit.

Buka file Product.wxs kemudian tambahkan kode berikut.

<Condition Message="This application requires SAP Crystal Report Shared Runtime. Please install the SAP Crystal Report Shared Runtime then run this installer again.">
   <![CDATA[Installed OR SAPBUSINESSOBJECT32 OR SAPBUSINESSOBJECT64]]>
</Condition>

Penjelasan: Membuat kondisi untuk mengecek SAP Crystal Report Runtime berdasarkan properti SAPBUSINESSOBJECT32 dan SAPBUSINESSOBJECT64.

Penutup

Sampai tahap ini, Anda telah berhasil menambahkan halaman lisensi, mengubah ikon aplikasi pada Control Panel, menambahkan checkbox untuk membuka aplikasi setelah di install, mengecek .NET Framework 4.5, mengecek SQL Server LocalDB 2014, dan mengecek SAP Crystal Report Runtime.

Jika Anda mengikuti semua proses yang telah dijelaskan di atas, maka file Product.wxs Anda akan terlihat seperti ini:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
  <?include "RelativePath.wxi" ?>
  <Product Id="*" Name="Wiyata Bhakti" Language="1033" Version="1.0.0.0" Manufacturer="Fahmi Noor Fiqri" UpgradeCode="{B3559FC8-4392-4CC4-A74D-E39A19B2E827}">
    <!-- Package -->
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
    <Media Id="1" Cabinet="app.cab" EmbedCab="yes" />
    <Icon Id="icon.ico" SourceFile="$(var.AuxiliaryDir)\WiyataBhakti-posApp.ico" />

    <!-- Properties -->
    <WixVariable Id="WixUILicenseRtf" Value="$(var.AuxiliaryDir)\license.rtf" />
    <Property Id="WixShellExecTarget" Value="[#WiyataBhakti.App.exe]" />
    <Property Id="ARPPRODUCTICON" Value="icon.ico" />
    <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Buka Wiyata Bhakti" />
    <PropertyRef Id="NETFRAMEWORK45" />

    <!-- Install Conditions -->
    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    <Condition Message="This application requires .NET Framework 4.5. Please install the .NET Framework then run this installer again.">
      <![CDATA[Installed OR NETFRAMEWORK45]]>
    </Condition>
    <Condition Message="This application requires SQL Server 2014 LocalDB. Please install the SQL Server 2014 LocalDB then run this installer again.">
      <![CDATA[Installed OR MSSQLSERVERLOCALDB32 OR MSSQLSERVERLOCALDB64]]>
    </Condition>
    <Condition Message="This application requires SAP Crystal Report Shared Runtime. Please install the SAP Crystal Report Shared Runtime then run this installer again.">
      <![CDATA[Installed OR SAPBUSINESSOBJECT32 OR SAPBUSINESSOBJECT64]]>
    </Condition>

    <!-- Features to install -->
    <Feature Id="ProductFeature" Title="Wiyata Bhakti Installer" Level="1">
      <ComponentGroupRef Id="AppFiles" />
      <ComponentGroupRef Id="DatabaseFiles" />
      <ComponentGroupRef Id="AppShortcuts" />
    </Feature>

    <!-- UI -->
    <UI>
      <UIRef Id="WixUI_Minimal" />
      <Publish Dialog="ExitDialog" Control="Finish" Event="DoAction" Value="LaunchApplication">
        WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 AND NOT Installed
      </Publish>
    </UI>

    <!-- Custom Actions -->
    <CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />
  </Product>
</Wix>

dan file Registry.wxs seperti di bawah ini.

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
	<Fragment>
	  <!-- Prerequiretes Search -->
	  <Property Id="MSSQLSERVERLOCALDB32">
	    <RegistrySearch Id="MSSQLSERVERLOCALDB32" Key="SOFTWARE\Microsoft\Microsoft SQL Server 2014 Redist\SqlLocalDB\CurrentVersion" Name="Version" Root="HKLM" Type="raw" Win64="no" />
	  </Property>
	  <Property Id="MSSQLSERVERLOCALDB64">
	    <RegistrySearch Id="MSSQLSERVERLOCALDB64" Key="SOFTWARE\Microsoft\Microsoft SQL Server 2014 Redist\SqlLocalDB\CurrentVersion" Name="Version" Root="HKLM" Type="raw" Win64="yes" />
	  </Property>
	  <Property Id="SAPBUSINESSOBJECT32">
	    <RegistrySearch Id="SAPBUSINESSOBJECT32" Key="SOFTWARE\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Shared" Name="BINDIR" Root="HKLM" Type="raw" Win64="no" />
	  </Property>
	  <Property Id="SAPBUSINESSOBJECT64">
	    <RegistrySearch Id="SAPBUSINESSOBJECT64" Key="SOFTWARE\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Shared" Name="BINDIR" Root="HKLM" Type="raw" Win64="yes" />
	  </Property>
	</Fragment>
</Wix>

Pada artikel ini hanya dijelaskan untuk melakukan pengecekan dan tidak menginstall program tambahan yang dibutuhkan seperti .NET Framework, SQL Server LocalDB 2014, dan SAP Crystal Report Runtime. Pada artikel selanjutnya akan dibahas cara membuat bootstrapper untuk memasang program tambahan tersebut sebelum memulai proses instalasi aplikasi.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

This site uses Akismet to reduce spam. Learn how your comment data is processed.