Windows Installer

**Windows Installer** (msiexec.exe, sebelumnya dikenal sebagai Microsoft Installer, *codename* Darwin) adalah komponen perangkat lunak dan antarmuka pemrograman aplikasi (API) Microsoft Windows yang digunakan untuk instalasi, pemeliharaan, dan penghapusan perangkat lunak. Informasi instalasi, dan secara opsional file itu sendiri, dikemas dalam paket instalasi, *database* relasional longgar terstruktur sebagai Penyimpanan Terstruktur COM dan umumnya dikenal sebagai "file MSI", dari ekstensi nama file *default* mereka. Paket dengan ekstensi file mst berisi Windows Installer "Skrip Transformasi", paket dengan ekstensi msm berisi "Merge Modules" dan ekstensi file pcp digunakan untuk "*Patch Creation Properties*". Windows Installer berisi perubahan signifikan dari pendahulunya, *Setup* API. Fitur-fitur baru termasuk kerangka kerja GUI dan generasi otomatis dari urutan penghapusan instalasi. Windows Installer diposisikan sebagai alternatif untuk kerangka kerja penginstal yang dapat dijalankan yang berdiri sendiri seperti versi *InstallShield* dan NSIS yang lebih lama.

Sebelum Microsoft Store (kemudian bernama Windows Store), Microsoft mendorong pihak ketiga untuk menggunakan Windows Installer sebagai dasar kerangka kerja penginstalan, sehingga mereka dapat menyinkronkan dengan benar dengan penginstal lain dan menjaga *database* internal produk yang diinstal tetap konsisten. Fitur penting seperti *[[rollback]]* dan pembuatan versi bergantung pada *database* internal yang konsisten untuk pengoperasian yang andal. Selanjutnya, Windows Installer memfasilitasi prinsip hak istimewa paling rendah dengan melakukan penginstalan perangkat lunak melalui proxy untuk pengguna yang tidak memiliki hak istimewa.

## Struktur Logis Paket
Paket menjelaskan penginstalan satu atau lebih produk lengkap dan secara universal diidentifikasi oleh GUID. Sebuah produk terdiri dari komponen, dikelompokkan ke dalam fitur. Windows Installer tidak menangani ketergantungan antar produk.

### Produk
Satu, terinstal, program kerja (atau set program) adalah produk. Sebuah produk diidentifikasi oleh GUID unik (properti *ProductCode*) yang memberikan identitas otoritatif di seluruh dunia. GUID, dalam kombinasi dengan nomor versi (properti *ProductVersion*), memungkinkan manajemen rilis file produk dan kunci registri.

Sebuah paket menyertakan logika paket dan metadata lain yang berhubungan dengan bagaimana paket dijalankan saat dijalankan. Misalnya, mengubah file EXE dalam produk mungkin memerlukan *ProductCode* atau *ProductVersion* diubah untuk manajemen rilis. Namun, hanya mengubah atau menambahkan kondisi peluncuran (dengan produk tetap sama persis seperti versi sebelumnya) masih memerlukan *PackageCode* untuk mengubah manajemen rilis dari file MSI itu sendiri.

### Fitur
Fitur adalah sekelompok komponen hierarkis. Sebuah fitur dapat berisi sejumlah komponen dan sub-fitur lainnya. Paket yang lebih kecil dapat terdiri dari satu fitur. Pemasang yang lebih kompleks mungkin menampilkan kotak dialog "pengaturan khusus", dari mana pengguna dapat memilih fitur mana yang akan dipasang atau dihapus.

Pembuat paket mendefinisikan fitur produk. Pengolah kata, misalnya, mungkin menempatkan file inti program ke dalam satu fitur, dan file bantuan program, pemeriksa ejaan opsional, dan modul alat tulis ke dalam fitur tambahan.

### Komponen
Komponen adalah unit dasar dari suatu produk. Setiap komponen diperlakukan oleh Windows Installer sebagai satu unit. Pemasang tidak dapat menginstal hanya sebagian dari suatu komponen. Komponen dapat berisi file program, folder, komponen COM, kunci registri, dan pintasan. Pengguna tidak langsung berinteraksi dengan komponen.

Komponen diidentifikasi secara global oleh GUID; sehingga komponen yang sama dapat dibagi di antara beberapa fitur dari paket yang sama atau beberapa paket, idealnya melalui penggunaan *Merge Modules*.

### Jalur Utama
Jalur kunci adalah file tertentu, kunci registri, atau sumber data ODBC yang ditetapkan oleh pembuat paket sebagai penting untuk komponen tertentu. Karena file adalah jenis jalur kunci yang paling umum, istilah file kunci biasanya digunakan. Sebuah komponen dapat berisi paling banyak satu jalur kunci; jika suatu komponen tidak memiliki jalur kunci eksplisit, folder tujuan komponen akan dianggap sebagai jalur kunci. Saat program berbasis MSI diluncurkan, Windows Installer memeriksa keberadaan jalur kunci. Jika ada ketidakcocokan antara status sistem saat ini dan nilai yang ditentukan dalam paket MSI (misalnya, file kunci tidak ada), fitur terkait akan diinstal ulang. Proses ini dikenal sebagai *self-healing* atau *self-repair*. Tidak boleh ada dua komponen yang menggunakan jalur kunci yang sama.

## Mengembangkan paket penginstal
Membuat paket penginstal untuk aplikasi baru bukanlah hal yang sepele. Penting untuk menentukan file mana yang harus diinstal, ke mana dan dengan kunci registri apa. Operasi non-standar apa pun dapat dilakukan menggunakan Tindakan Kustom, yang biasanya dikembangkan di DLL. Ada sejumlah produk komersial dan *freeware* untuk membantu dalam membuat paket MSI, termasuk *Visual Studio* (asli hingga VS 2010, dengan ekstensi pada versi VS yang lebih baru), *InstallShield* dan WiX. Untuk berbagai tingkat, antarmuka pengguna dan perilaku dapat dikonfigurasi untuk digunakan dalam situasi yang kurang umum seperti instalasi tanpa pengawasan. Setelah disiapkan, paket penginstal "dikompilasi" dengan membaca instruksi dan file dari mesin lokal pengembang, dan membuat file .msi.

Antarmuka pengguna (*user interface/ dialog box*) yang disajikan pada awal penginstalan dapat diubah atau dikonfigurasikan oleh insinyur penyiapan yang mengembangkan penginstal baru. Bahasa tombol, bidang teks, dan label terbatas yang dapat diatur dalam urutan kotak dialog. Paket penginstal harus dapat berjalan tanpa UI apa pun, untuk apa yang disebut "*unatettended installation*".

### Validasi ICE
Microsoft menyediakan satu set *Internal Consistency Evaluators* (ICE) yang dapat digunakan untuk mendeteksi potensi masalah dengan database MSI. Aturan ICE digabungkan ke dalam *file* CUB, yang merupakan file MSI yang dilucuti yang berisi tindakan kustom yang menguji konten *database* MSI target untuk peringatan dan kesalahan validasi. Validasi ICE dapat dilakukan dengan alat Platform SDK Orca dan msival2, atau dengan alat validasi yang dikirimkan dengan berbagai lingkungan pembuatan.

Misalnya, beberapa aturan ICE adalah:

* ICE09: Memvalidasi bahwa setiap komponen yang ditujukan untuk folder Sistem ditandai sebagai permanen.
* ICE24: Memvalidasi bahwa kode produk, versi produk, dan bahasa produk memiliki format yang sesuai.
* ICE33: Memvalidasi bahwa tabel Registri tidak digunakan untuk data yang lebih cocok untuk tabel lain (Kelas, Ekstensi, Kata Kerja, dan seterusnya).

Mengatasi peringatan dan kesalahan validasi ICE merupakan langkah penting dalam proses rilis.

## Versi

## Referensi