**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
-----

| Versi | Disertakan dengan | Juga Tersedia untuk |
| --- | --- | --- |
| 1.0 | Office 2000 | N/A |
| 1.1 | Windows 2000 RTM, SP1, SP2
Office XP | Windows 95, Windows 98
Windows NT 4.0 |
| 1.2 | Windows Me | N/A |
| 2.0 | Windows XP RTM, SP1
Windows 2000 SP3, SP4
Windows Server 2003 RTM | Windows 9x
Windows NT 4.0
Windows 2000 |
| 3.0 | Windows XP SP2 | Windows 2000
Windows XP
Windows Server 2003 |
| 3.1 | Windows XP SP3
Windows Server 2003 SP1, SP2
Windows XP Professional x64 Edition | Windows 2000
Windows XP
Windows Server 2003 |
| 4.0 | Windows Vista RTM, SP1
Windows Server 2008 RTM | N/A |
| 4.5 | Windows Vista SP2
Windows Server 2008 SP2 | Windows XP
Windows Server 2003
Windows XP Professional x64 Edition
Windows Vista
Windows Server 2008 |
| 5.0 | Windows 7 dan setelahnya
Windows Server 2008 R2 dan setelahnya | N/A |

Referensi
---------

1. ↑  "when setup isn't just xcopy : Inside the MSI file format". *web.archive.org*. 2009-01-15. Archived from the original on 2009-01-15. Diakses tanggal 2022-02-07. Pemeliharaan CS1: Url tak layak (link)
2. ↑  "when setup isn't just xcopy : The story of Orca". *web.archive.org*. 2008-12-23. Archived from the original on 2010-02-09. Diakses tanggal 2022-02-07. Pemeliharaan CS1: Url tak layak (link)
3. ↑  kexugit. "Windows Installer, The .NET Framework, The Bootstrapper, and You". *docs.microsoft.com* (dalam bahasa Inggris). Diakses tanggal 2022-02-07.
4. ↑  "Identifying Windows Installer File Types". *Visual Studio Setup* (dalam bahasa Inggris). 2006-02-27. Diakses tanggal 2022-02-07.
5. ↑  drewbatgit. "Windows Installer Components - Win32 apps". *docs.microsoft.com* (dalam bahasa Inggris). Diakses tanggal 2022-02-07.
6. ↑  "Visual Studio setup projects (vdproj) will not ship with future versions of VS". *Buck Hodges* (dalam bahasa Inggris). 2011-03-17. Diakses tanggal 2022-02-07.
7. ↑  "Visual Studio Installer Projects Extension". *Visual Studio Blog* (dalam bahasa Inggris). 2014-04-17. Diakses tanggal 2022-02-07.
8. ↑  drewbatgit. "Internal Consistency Evaluators - ICEs - Win32 apps". *docs.microsoft.com* (dalam bahasa Inggris). Diakses tanggal 2022-02-07.
9. 1 2  drewbatgit. "Released Versions of Windows Installer - Win32 apps". *docs.microsoft.com* (dalam bahasa Inggris). Diakses tanggal 2022-02-07.
10. ↑  "What's New in Windows Installer 4.5 (Windows)". *docs.microsoft.com* (dalam bahasa Inggris). Diakses tanggal 2022-02-07.