Tutorial Installer: Membuat Bootstrapper Installer (4 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)
  4. Tutorial Installer: Membuat Bootstrapper Installer (4 dari 5) [artikel ini]
  5. Tutorial Installer: Finalisasi Setup Project/Finishing (5 dari 5)

Membuat Bootstrapper

Pada artikel sebelumnya sudah di bahas bagaimana cara membuat installer MSI yang dapat menginstall aplikasi dan melakukan pengecekan terhadap beberapa program lain. Pada artikel Kustomisasi dan Install Conditions, telah dibuat kondisi pengcekan untuk .NET Framework, SQL Server LocalDB 2014, dan Crystal Report tetapi tidak dibahas bagaimana cara memasang program tersebut apabila belum dipasang.

Paket installer MSI memang tidak dapat menginstall program lain, maka dari itu dibutuhkan tipe installer lain yang dapat memasang program lain dalam satu paket instalasi. Bootstrapper merupakan jenis installer yang dapat “menggabungkan” beberapa installer lain agar dapat dijalankan secara berurutan (chain).

Membuat Project Bootstrapper

Klik kanan pada solution ContohSetup, kemudian klik Add > New Project… dan pilih Bootstrapper Project for  WiX v3. Beri nama project bootstrapper dengan nama ContohBootstrapper. Saat project selesai dibuat, secara otomatis file Bundle.wxs akan dibuat. Berikut adalah isi file tersebut.

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Bundle Name="ContohBootstrapper" Version="1.0.0.0" Manufacturer="" UpgradeCode="e26ad856-c2d5-44c6-b9bf-38e6ea66eeb0">
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />

    <Chain>
	<!-- TODO: Define the list of chained packages. -->
	<!-- <MsiPackage SourceFile="path\to\your.msi" /> -->
     </Chain>
  </Bundle>
</Wix>

Sebelum memulai membuat bootstrapper, tambahkan referensi ke WixUtilExtension.dll dan WixNetFxExtension.dll untuk melakukan registry search. Sama seperti setup project sebelumnya, kita perlu menggunakan variabel agar path installer yang akan digunakan lebih mudah digunakan. Buat Installer File dengan nama RelativePath.wxs kemudian salin rekat kode di bawah ini.

<?xml version="1.0" encoding="utf-8"?>
<Include>
  <?define NetFx451Release = 461308 ?>
  <?define SourceDir="E:\installer_jadi"?>
</Include>

Penjelasan:

  1. Baris 3, deklarasi variabel NetFx451Release dengan nilai 461308.
  2. Baris 4, deklarasi variabel SourceDir dengan nilai E:\installer_jadi.

Untuk bootstrapper ini, letakkan semua setup yang akan digabung dalam 1 folder, pada contoh ini penulis menggunakan folder E:\installer_jadi.

Folder Setup Bootstrapper
Folder Setup Bootstrapper

Pada gambar di atas dapat terlihat setup instalasi untuk .NET Framework 4.5.1 (NDP451-xxx.exe), SQL Server LocalDB 2014 (SqlLocalDB-2014-xx.msi), Crystal Report Runtime (CRRuntime_xx.msi), dan Visual C++ 2015 Redistributable (vcredist-2015_xx.exe). Keempat program tersebut akan di install menggunakan bootstrapper.

Menambahkan Logo dan Lisensi pada Bootstrapper

Sama halnya dengan installer MSI, pada bootstrapper juga dapat menampilkan lisensi dan logo. Untuk menambahkan lisensi dan logo, tambahkan kode di bawah ini.

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">
  <?include "RelativePath.wxi" ?>

  <Bundle Name="Wiyata Bhakti POS" Version="1.0.0.0" Manufacturer="Kodesiana.com" UpgradeCode="35e2cf60-5f88-4ce3-a6e9-0d4e09d5a449">
    <!-- Bootstrapper -->
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
      <bal:WixStandardBootstrapperApplication LicenseFile="$(var.SourceDir)\license.rtf" LogoFile="$(var.SourceDir)\logo.png" ShowVersion="yes" />
    </BootstrapperApplicationRef>

    <!-- Packages -->
    <Chain>
       <!-- TODO: Define the list of chained packages. -->
       <!-- <MsiPackage SourceFile="path\to\your.msi" /> -->
    </Chain>
  </Bundle>
</Wix>

Penjelasan:

  1. Baris 4, menambahkan referensi ke wxs.
  2. Baris 6, definisi bootstrapper, ubah sesuai kebutuhan.
  3. Baris 9, definisi bootstrapper dengan tampilan lisensi.
  4. Baris 11, menentukan lokasi file lisensi (RTF).
  5. Baris 12, menentukan lokasi file logo (PNG/BMP, 32×32).

Menambahkan .NET Framework 4.5

Tambahkan Installer File baru dengan nama Packages.wxs kemudian tambahkan kode di bawah ini.

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
  <?include "RelativePath.wxi" ?>

  <Fragment>
    <util:RegistrySearchRef Id="NETFRAMEWORK45"/>

    <!-- NET Framework -->
    <PackageGroup Id="NetFx451FullRedist">
      <ExePackage Id="NetFx451FullRedist" Cache="no" Compressed="yes" PerMachine="yes" Vital="yes" Permanent="yes" Protocol="netfx4" Name="Redist\NDP451-KB2858728-x86-x64-AllOS-ENU.exe" DetectCondition="NETFRAMEWORK45" SourceFile="$(var.SourceDir)\NDP451-KB2858728-x86-x64-AllOS-ENU.exe" InstallCommand="/q /norestart /ChainingPackage &quot;[WixBundleName]&quot;" RepairCommand="/q /norestart /repair /ChainingPackage &quot;[WixBundleName]&quot;" UninstallCommand="/uninstall /q /norestart /ChainingPackage &quot;[WixBundleName]&quot;" />
    </PackageGroup>
  </Fragment>
</Wix>

Penjelasan:

  1. Baris 2, deklarasi bootstrapper.
  2. Baris 4, menambahkan referensi ke file wxs.
  3. Baris 7, menambahkan referensi ke properti NETFRAMEWORK45.
  4. Baris 9, menandakan kumpulan paket instalasi dengan Id NetFx451FullRedist.
  5. Baris 10, definisi setup yang akan dieksekusi dengan Id NetFx451FullRedist. Pada contoh ini adalah setup .NET Framework 4.5.1 dengan perintah silent. Atribut DetectCondition memastikan bahwa setup ini hanya di install apabila belum ada pada komputer.

Buka kembali file Bundle.wxs dan tambahkan kode berikut.

<!-- Packages -->
<Chain>
  <PackageGroupRef Id="NetFx451FullRedist"/>
</Chain>

Penjelasan:

  1. Baris 3, menambahkan referensi ke NetFx451FullRedist agar setup tersebut ikut dieksekusi saat instalasi.

Menambahkan SQL Server LocalDB 2014

Untuk menambahkan setup lain selain .NET Framework, atribut DetectCondition harus dibuat secara manual menggunakan <util:RegistrySearch>. Hal ini karena WiX Toolset tidak memiliki informasi apa pun mengenai program yang akan di install. Buka file Packages.wxs kemudian tambahkan kode berikut.

<util:RegistrySearch Id="SQLSERVERLOCALDB" Variable="SQLSERVERLOCALDB" Root="HKLM" Value="ParentInstance" Result="exists" Win64="no" Key="SOFTWARE\Microsoft\Microsoft SQL Server Local DB\Installed Versions\12.0" />

 <!-- SQL Server LocalDB -->
 <PackageGroup Id="SQLServerLocalDB">
  <MsiPackage SourceFile="$(var.SourceDir)\SqlLocalDB-2014-32.msi" InstallCondition="(NOT VersionNT64) AND (NOT SQLSERVERLOCALDB)">
    <MsiProperty Name="IACCEPTSQLLOCALDBLICENSETERMS" Value="YES"/>
  </MsiPackage>
  <MsiPackage SourceFile="$(var.SourceDir)\SqlLocalDB-2014-64.msi" InstallCondition="(VersionNT64) AND (NOT SQLSERVERLOCALDB)">
    <MsiProperty Name="IACCEPTSQLLOCALDBLICENSETERMS" Value="YES"/>
  </MsiPackage>
</PackageGroup>

Penjelasan:

  1. Baris 1-3, definisi pencarian registry untuk mengetahui apakah value ParentInstance ada pada registry. Jika Ada, berarti SQL Server LocalDB 2014 sudah di install di komputer.
  2. Baris 6, definisi paket instalasi SQLServerLocalDB.
  3. Baris 7-10, definisi setup installer untuk SQL Server LocalDB 2014 versi 32-bit.
  4. Baris 11-14, definisi setup installer untuk SQL Server LocalDB 2014 versi 64-bit.
  5. Baris 9 dan 13, properti MSI untuk menyetujui lisensi SQL Server LocalDB 2014 (silent install).

Buka kembali file Bundle.wxs dan tambahkan kode berikut.

<!-- Packages -->
<Chain>
  <PackageGroupRef Id="SQLServerLocalDB"/>
</Chain>

Penjelasan:

  1. Baris 3, menambahkan referensi ke SQLServerLocalDB.

Menambahkan Crystal Report Runtime

Menginstall Crystal Report Runtime sama seperti menginstall SQL Server LocalDB 2014, tetapi untuk menginstall CRRuntime, diperlukan Visual C++ 2015 Redistributable. Jadi, pada tahap ini kita akan menambahkan dua setup installer pada bootstrapper.

Tambahkan kode berikut pada Packages.wxs.

<util:RegistrySearch Id="SAPCR" Variable="SAPCR" Root="HKLM" Value="BINDIR" Result="exists" Win64="no" Key="SOFTWARE\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Shared" />

<!-- Visual C++ Redistributable 2005 -->
<PackageGroup Id="VCRedist">
  <ExePackage Id="VCRedist32" Cache="no" Compressed="yes" PerMachine="yes" Vital="yes" Permanent="yes" Name="Redist\vcredist-2015_x86.exe" InstallCondition="NOT VersionNT64" SourceFile="$(var.SourceDir)\vcredist-2015_x86.exe" InstallCommand="/q" />
  <ExePackage Id="VCRedist64" Cache="no" Compressed="yes" PerMachine="yes" Vital="yes" Permanent="yes" Name="Redist\vcredist-2015_x64.exe" InstallCondition="VersionNT64" SourceFile="$(var.SourceDir)\vcredist-2015_x64.exe" InstallCommand="/q" />
</PackageGroup>

<!-- SAP CrystalReport -->
<PackageGroup Id="SAPCrystalReport">
  <MsiPackage SourceFile="$(var.SourceDir)\CRRuntime_32bit_13_0_22.msi" InstallCondition="(NOT VersionNT64) AND (NOT SAPCR)" />
  <MsiPackage SourceFile="$(var.SourceDir)\CRRuntime_64bit_13_0_22.msi" InstallCondition="(VersionNT64) AND (NOT SAPCR)" />
</PackageGroup>

Penjelasan: kode di atas sangat mirip dengan kode pada tahap Menambahkan SQL Server LocalDB 2014. Konsep dan cara kerja sama seperti kode sebelumnya.

Buka kembali file Bundle.wxs dan tambahkan kode berikut.

<!-- Packages -->
<Chain>
  <PackageGroupRef Id="VCRedist"/>
  <PackageGroupRef Id="SAPCrystalReport"/>
</Chain>

Penjelasan:

  1. Baris 3, menambahkan referensi ke VCRedist dan SAPCrystalReport.

Menambahkan Wiyata Bhakti Installer

Akhirnya, installer utama ditambahkan ke dalam bootstrapper. Installer utama aplikasi diletakkan di akhir karena program utama ini membutuhkan program lain agar dapat beroperasi, jadi harus menunggu program lain yang sebelumnya telah di susun terinstall.

Buka file Packages.wxs kemudian tambahkan kode di bawah ini.

<!-- Wiyata Bhakti Full -->
<PackageGroup Id="WiyataBhaktiFull">
  <MsiPackage SourceFile="$(var.SourceDir)\WiyataBhakti.Installer.msi" />
</PackageGroup>

Penjelasan: kode di atas digunakan untuk memasang Wiyata Bhakti.

Buka kembali file Bundle.wxs dan tambahkan kode berikut.

<!-- Packages -->
<Chain>
  <PackageGroupRef Id="WiyataBhaktiFull"/>
</Chain>

Penutup

Pada tahap ini Anda telah berhasil membuat bootstrapper untuk menginstall .NET Framework, SQL Server 2014 LocalDB, Crystal Report Runtime, dan Wiyata Bhakti. Hasil akhir file Bundle.wxs apabila Anda mengikuti semua langkah-langkah di atas adalah sebagai berikut.

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">
  <?include "RelativePath.wxi" ?>

  <Bundle Name="Wiyata Bhakti POS" Version="1.0.0.0" Manufacturer="Kodesiana.com" UpgradeCode="35e2cf60-5f88-4ce3-a6e9-0d4e09d5a449">
    <!-- Bootstrapper -->
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
      <bal:WixStandardBootstrapperApplication LicenseFile="$(var.SourceDir)\license.rtf" LogoFile="$(var.SourceDir)\logo.png" ShowVersion="yes" />
    </BootstrapperApplicationRef>

    <!-- Packages -->
    <Chain>
      <PackageGroupRef Id="VCRedist"/>
      <PackageGroupRef Id="NetFx451FullRedist"/>
      <PackageGroupRef Id="SQLServerLocalDB"/>
      <PackageGroupRef Id="SAPCrystalReport"/>
      <PackageGroupRef Id="WiyataBhaktiFull"/>
    </Chain>
  </Bundle>
</Wix>

Packages.wxs

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
  <?include "RelativePath.wxi" ?>

  <Fragment>
    <util:RegistrySearchRef Id="NETFRAMEWORK45"/>
    <util:RegistrySearch Id="SQLSERVERLOCALDB" Variable="SQLSERVERLOCALDB" Root="HKLM" Value="ParentInstance" Result="exists" Win64="no" Key="SOFTWARE\Microsoft\Microsoft SQL Server Local DB\Installed Versions\12.0" />
    <util:RegistrySearch Id="SAPCR" Variable="SAPCR" Root="HKLM" Value="BINDIR" Result="exists" Win64="no" Key="SOFTWARE\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Shared" />
    <!-- NET Framework -->
    <PackageGroup Id="NetFx451FullRedist">
      <ExePackage Id="NetFx451FullRedist" Cache="no" Compressed="yes" PerMachine="yes" Vital="yes" Permanent="yes" Protocol="netfx4" Name="Redist\NDP451-KB2858728-x86-x64-AllOS-ENU.exe" DetectCondition="NETFRAMEWORK45" SourceFile="$(var.SourceDir)\NDP451-KB2858728-x86-x64-AllOS-ENU.exe" InstallCommand="/q /norestart /ChainingPackage &quot;[WixBundleName]&quot;" RepairCommand="/q /norestart /repair /ChainingPackage &quot;[WixBundleName]&quot;" UninstallCommand="/uninstall /q /norestart /ChainingPackage &quot;[WixBundleName]&quot;" />
    </PackageGroup>

    <!-- SQL Server LocalDB -->
    <PackageGroup Id="SQLServerLocalDB">
      <MsiPackage SourceFile="$(var.SourceDir)\SqlLocalDB-2014-32.msi" InstallCondition="(NOT VersionNT64) AND (NOT SQLSERVERLOCALDB)">
        <MsiProperty Name="IACCEPTSQLLOCALDBLICENSETERMS" Value="YES"/>
      </MsiPackage>
      <MsiPackage SourceFile="$(var.SourceDir)\SqlLocalDB-2014-64.msi" InstallCondition="(VersionNT64) AND (NOT SQLSERVERLOCALDB)">
        <MsiProperty Name="IACCEPTSQLLOCALDBLICENSETERMS" Value="YES"/>
      </MsiPackage>
    </PackageGroup>

    <!-- Visual C++ Redistributable 2005 -->
    <PackageGroup Id="VCRedist">
      <ExePackage Id="VCRedist32" Cache="no" Compressed="yes" PerMachine="yes" Vital="yes" Permanent="yes" Name="Redist\vcredist-2015_x86.exe" InstallCondition="NOT VersionNT64" SourceFile="$(var.SourceDir)\vcredist-2015_x86.exe" InstallCommand="/q" />
      <ExePackage Id="VCRedist64" Cache="no" Compressed="yes" PerMachine="yes" Vital="yes" Permanent="yes" Name="Redist\vcredist-2015_x64.exe" InstallCondition="VersionNT64" SourceFile="$(var.SourceDir)\vcredist-2015_x64.exe" InstallCommand="/q" />
    </PackageGroup>

    <!-- SAP CrystalReport -->
    <PackageGroup Id="SAPCrystalReport">
      <MsiPackage SourceFile="$(var.SourceDir)\CRRuntime_32bit_13_0_22.msi" InstallCondition="(NOT VersionNT64) AND (NOT SAPCR)" />
      <MsiPackage SourceFile="$(var.SourceDir)\CRRuntime_64bit_13_0_22.msi" InstallCondition="(VersionNT64) AND (NOT SAPCR)" />
    </PackageGroup>

    <!-- Wiyata Bhakti App -->
    <PackageGroup Id="WiyataBhaktiFull">
      <MsiPackage SourceFile="$(var.SourceDir)\WiyataBhakti.Installer.msi" />
    </PackageGroup>
  </Fragment>
</Wix>

Setelah Anda selesai membuat bootstrapper, klik Build > Build ContohBootstrapper untuk membuat bootstrapper. Karena bootstrapper ini menggabungkan beberapa installer lain, maka ukurannya juga akan lebih besar sesuai dengan installer lain yang ikut dalam bootstrapper. Pada contoh ini bootstrapper yang dibuat oleh penulis berukuran 360MB sedangkan installer MSI berukuran 5MB.

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.