Tabel Komponen

Tabel Komponen mencantumkan komponen dan memiliki kolom berikut.

Kolom Jenis Kunci Dapat diubah ke null
Komponen Pengidentifikasi Y N
ComponentId GUID N Y
Direktori_ Pengidentifikasi N N
Atribut Bilangan bulat N N
Kondisi Kondisi N Y
KeyPath Pengidentifikasi N Y

Kolom

Komponen

Mengidentifikasi rekaman komponen.

Kunci tabel utama.

ComponentId

STRING GUID yang unik untuk komponen, versi, dan bahasa ini.

Perhatikan bahwa huruf GUID ini harus dalam huruf besar. Utilitas seperti GUIDGEN dapat menghasilkan GUID yang berisi huruf kecil. Huruf kecil harus diubah menjadi huruf besar untuk membuat GUID kode komponen yang valid ini.

Jika kolom ini null, alat penginstal tidak mendaftarkan komponen dan komponen tidak dapat dihapus atau diperbaiki oleh alat penginstal. Ini mungkin sengaja dilakukan jika komponen hanya diperlukan selama penginstalan, seperti tindakan kustom yang membersihkan file sementara atau menghapus produk lama. Ini mungkin juga berguna saat menyalin file data ke komputer pengguna yang tidak perlu didaftarkan.

Direktori_

Kunci eksternal entri dalam tabel Direktori. Ini adalah nama properti yang nilainya berisi jalur aktual, yang dapat diatur baik oleh tindakan AppSearch atau dengan pengaturan default yang diperoleh dari tabel Direktori.

Pengembang harus menghindari komponen penulisan yang menempatkan file ke salah satu folder Profil Pengguna. File-file ini tidak akan tersedia untuk semua pengguna dalam situasi multi-pengguna dan dapat menyebabkan alat penginstal melihat komponen secara permanen sebagai memerlukan perbaikan.

Kunci eksternal ke kolom salah satu tabel Direktori.

Atribut

Kolom ini berisi bendera bit yang menentukan opsi untuk eksekusi jarak jauh. Tambahkan bit yang ditunjukkan ke nilai total di kolom untuk menyertakan opsi.

Catatan

Dalam kasus file .msi yang sedang diunduh dari lokasi web, bendera atribut tidak boleh diatur untuk memungkinkan komponen dijalankan dari sumber. Ini adalah batasan Pemasang Windows dan dapat mengembalikan status fitur INSTALLSTATE_BADCONFIG.

Bendera bit
msidbComponentAttributesLocalOnly
0
0x0000
Komponen tidak dapat dijalankan dari sumber. Atur bit ini untuk semua komponen milik fitur untuk mencegah fitur dijalankan dari jaringan atau run-from-source. Perhatikan bahwa jika fitur tidak memiliki komponen, fitur selalu menampilkan opsi run-from-source dan run-from-my-computer sebagai opsi yang valid.
msidbComponentAttributesSourceOnly
1
0x0001
Komponen hanya dapat dijalankan dari sumber. Atur bit ini untuk semua komponen milik fitur untuk mencegah fitur dijalankan dari komputer saya. Perhatikan bahwa jika fitur tidak memiliki komponen, fitur selalu menampilkan opsi run-from-source dan run-from-my-computer sebagai opsi yang valid.
msidbComponentAttributesOptional
2
0x0002
Komponen dapat berjalan secara lokal atau dari sumber.
msidbComponentAttributesRegistryKeyPath
4
0x0004
Jika bit ini diatur, nilai di kolom KeyPath digunakan sebagai kunci ke dalam tabel Registri. Jika bidang Nilai dari rekaman terkait dalam tabel Registri null, bidang Nama dalam rekaman tersebut tidak boleh berisi "+", "-", atau "*". Untuk informasi selengkapnya, lihat deskripsi bidang Nama dalam tabel Registri.
Mengatur bit ini direkomendasikan untuk entri registri yang ditulis ke sarang HKCU. Ini memastikan alat penginstal menulis entri registri HKCU yang diperlukan ketika ada beberapa pengguna pada komputer yang sama.
msidbComponentAttributesSharedDllRefCount
8
0x0008
Jika bit ini diatur, alat penginstal akan menaikkan jumlah referensi di registri DLL bersama dari file kunci komponen. Jika bit ini tidak diatur, alat penginstal akan menaikkan jumlah referensi hanya jika jumlah referensi sudah ada.
msidbComponentAttributesPermanent
16
0x0010
Jika bit ini diatur, alat penginstal tidak menghapus komponen selama penghapusan instalasi. Alat penginstal mendaftarkan klien sistem tambahan untuk komponen dalam pengaturan registri Pemasang Windows.
msidbComponentAttributesODBCDataSource
32
0x0020
Jika bit ini diatur, nilai di kolom KeyPath adalah kunci ke dalam tabel ODBCDataSource.
msidbComponentAttributesTransitive
64
0x0040
Jika bit ini diatur, alat penginstal mengevaluasi ulang nilai pernyataan di kolom Kondisi setelah penginstalan ulang. Jika nilai sebelumnya False dan telah berubah menjadi True, alat penginstal menginstal komponen. Jika nilai sebelumnya True dan telah berubah menjadi False, alat penginstal akan menghapus komponen meskipun komponen memiliki produk lain sebagai klien.
Bit ini hanya boleh diatur untuk komponen transitif. Lihat Menggunakan Komponen Transitif.
msidbComponentAttributesNeverOverwrite
128
0x0080
Jika bit ini diatur, penginstal tidak menginstal atau menginstal ulang komponen jika file jalur kunci atau entri registri jalur kunci untuk komponen sudah ada. Aplikasi ini mendaftarkan dirinya sebagai klien komponen.
Gunakan bendera ini hanya untuk komponen yang sedang didaftarkan oleh tabel Registri. Jangan gunakan bendera ini untuk komponen yang didaftarkan oleh tabel AppId, Class, Extension, ProgId, MIME, dan Verb.
msidbComponentAttributes64bit
256
0x0100
Atur bit ini untuk menandai ini sebagai komponen 64-bit. Atribut ini memfasilitasi penginstalan paket yang mencakup komponen 32-bit dan 64-bit. Jika bit ini tidak diatur, komponen terdaftar sebagai komponen 32-bit.
Jika ini adalah komponen 64-bit yang menggantikan komponen 32-bit, atur bit ini dan tetapkan GUID baru di kolom ComponentId.
msidbComponentAttributesDisableRegistryReflection
512
0x0200
Atur bit ini untuk menonaktifkan Refleksi Registri pada semua kunci registri yang ada dan baru yang terpengaruh oleh komponen ini. Jika bit ini diatur, Pemasang Windows memanggil RegDisableReflectionKey pada setiap kunci yang diakses oleh komponen. Bit ini tersedia dengan Windows Installer versi 4.0. Bit ini diabaikan pada sistem 32-bit. Bit ini diabaikan pada Windows XP versi 64-bit.
Catatan: Aplikasi Windows 32-bit yang berjalan pada emulator Windows 64-bit (WOW64) mengacu pada tampilan registri yang berbeda dari aplikasi 64-bit. Registri refleksi menyalin beberapa nilai registri antara kedua tampilan registri ini.
msidbComponentAttributesUninstallOnSupersedence
1024
0x0400
Atur bit ini untuk komponen dalam paket patch untuk mencegah meninggalkan komponen yatim piatu di komputer. Jika patch berikutnya diinstal, ditandai dengan nilai msidbPatchSequenceSupersedeEarlier dalam tabel MsiPatchSequence untuk menggantikan patch pertama, Windows Installer 4.5 dan yang lebih baru dapat membatalkan pendaftaran dan menghapus instalasi komponen yang ditandai dengan nilai msidbComponentAttributesUninstallOnSupersedence . Jika komponen tidak ditandai dengan bit ini, penginstalan patch pengganti dapat meninggalkan komponen yang tidak digunakan di komputer.
Mengatur properti MSIUNINSTALLSUPERSEDEDCOMPONENTS memiliki efek yang sama dengan mengatur bit ini untuk semua komponen.
Windows Installer 4.0 dan yang lebih lama: Nilai msidbComponentAttributesUninstallOnSupersedence tidak didukung dan diabaikan.

msidbComponentAttributesShared
2048
0x0800
Jika komponen ditandai dengan nilai atribut ini dalam setidaknya satu paket yang diinstal pada sistem, alat penginstal memperlakukan komponen sebagaimana ditandai di semua paket. Jika paket yang berbagi komponen yang ditandai dihapus instalannya, Pemasang Windows 4.5 dapat terus berbagi versi tertinggi komponen pada sistem, bahkan jika versi tertinggi tersebut diinstal oleh paket yang sedang dihapus instalasinya.
Jika kebijakan DisableSharedComponent diatur ke 1, tidak ada paket yang mendapatkan fungsionalitas komponen bersama yang diaktifkan oleh bit ini.
Windows Installer 4.0 dan yang lebih lama: Nilai msidbComponentAttributesShared tidak didukung dan diabaikan.

Kondisi

Kolom ini berisi pernyataan kondisional yang dapat mengontrol apakah komponen diinstal. Jika kondisi null atau dievaluasi ke true, maka komponen diaktifkan. Jika kondisi mengevaluasi ke False, maka komponen dinonaktifkan dan tidak diinstal.

Bidang Kondisi mengaktifkan atau menonaktifkan komponen hanya selama tindakan CostFinalize. Untuk mengaktifkan atau menonaktifkan komponen setelah CostFinalize, Anda harus menggunakan tindakan kustom atau DoAction ControlEvent untuk memanggil MsiSetComponentState.

Perhatikan bahwa kecuali bit Transitif di kolom Atribut diatur untuk komponen, komponen tetap diaktifkan setelah diinstal bahkan jika pernyataan kondisional di kolom Kondisi kemudian dievaluasi ke False pada penginstalan pemeliharaan produk berikutnya.

Kolom Kondisi dalam tabel Komponen menerima ekspresi bersyarah yang berisi referensi ke status fitur dan komponen yang diinstal. Untuk informasi tentang sintaks pernyataan kondisional, lihat Sintaks Pernyataan Kondisional.

KeyPath

Nilai ini menunjuk ke file atau folder milik komponen yang digunakan alat penginstal untuk mendeteksi komponen. Dua komponen tidak dapat berbagi nilai jalur kunci yang sama. Nilai dalam kolom ini juga merupakan jalur yang dikembalikan oleh fungsi MsiGetComponentPath .

Jika nilainya tidak null, maka KeyPath adalah kunci primer ke dalam tabel Registri, ODBCDataSource, atau File tergantung pada nilai Atribut. Jika KeyPath null, folder kolom Directory_ digunakan sebagai jalur kunci.

Karena folder yang dibuat oleh alat penginstal dihapus ketika menjadi kosong, Anda harus menulis entri ke dalam tabel CreateFolder untuk menginstal komponen yang terdiri dari folder kosong.

Perhatikan bahwa jika komponen Pemasang Windows berisi file atau kunci registri yang dilindungi oleh Windows Resource Protection (WRP) atau file yang dilindungi oleh Windows File Protection (WFP), sumber daya ini harus digunakan sebagai KeyPath untuk komponen. Dalam hal ini, Pemasang Windows tidak menginstal, memperbarui, atau menghapus komponen. Anda tidak boleh menyertakan sumber daya yang dilindungi dalam paket penginstalan. Sebagai gantinya, Anda harus menggunakan mekanisme penggantian sumber daya yang didukung untuk Perlindungan Sumber Daya Windows. Untuk informasi selengkapnya, lihat Menggunakan Penginstal Windows dan Perlindungan Sumber Daya Windows.

Keterangan

Untuk diskusi tentang hubungan antara komponen dan fitur, lihat Tabel Fitur.

Alat penginstal melacak DLL bersama secara independen dari jumlah referensi DLL bersama di registri. Jika jumlah referensi untuk DLL bersama ada di registri, alat penginstal selalu meningkatkan jumlah saat menginstal file dan menguranginya saat sedang menghapus instalasi. Jika msidbComponentAttributesSharedDllRefCount, tidak diatur, dan jumlah referensi belum ada, alat penginstal tidak akan membuatnya. Perhatikan bahwa jumlah referensi SharedDLL dalam registri ditambahkan untuk file apa pun yang diinstal ke folder Sistem.

Jika msidbComponentAttributesSharedDllRefCount tidak diatur, maka aplikasi lain dapat menghapus komponen bahkan jika masih diperlukan. Untuk melihat bagaimana hal ini dapat terjadi, pertimbangkan skenario berikut:

  • Aplikasi yang menggunakan alat penginstal menginstal komponen bersama.
  • Bit msidbComponentAttributesSharedDllRefCount tidak diatur dan tidak ada jumlah referensi. Dengan demikian alat penginstal tidak memulai jumlah referensi.
  • Aplikasi warisan yang berbagi komponen ini dan tidak menggunakan alat penginstal diinstal.
  • Aplikasi warisan membuat dan menaikkan jumlah referensi untuk komponen bersama.
  • Aplikasi warisan dihapus instalannya.
  • Jumlah referensi untuk komponen bersama dikurangi menjadi nol dan komponen dihapus.
  • Aplikasi yang menggunakan alat penginstal tidak lagi memiliki akses ke komponen.

Untuk menghindari perilaku ini, atur msidbComponentAttributesSharedDllRefCount.

Perhatikan bahwa komponen layanan sistem tidak boleh ditentukan sebagai run-from-source tanpa dirancang khusus untuk penggunaan tersebut. Lihat tabel ServiceInstall untuk detail selengkapnya.

Perhatikan bahwa atribut yang mengaktifkan penginstalan run-from-source tidak boleh diatur untuk komponen yang berisi pustaka tautan dinamis yang masuk ke folder sistem. Alasannya adalah bahwa jika status penginstalan komponen diatur ke run-from-source dengan mengikuti fitur atau dengan diatur di UI, panggilan berikutnya ke LoadLibrary pada DLL akan gagal.

Lihat juga, Mengontrol Status Pemilihan Fitur.

Validasi

ICE02
ICE03
ICE06
ICE07
ICE08
ICE09
ICE18
ICE19
ICE21
ICE30
ICE32
ICE35
ICE38
ICE41
ICE42
ICE43
ICE46
ICE50
ICE54
ICE57
ICE59
ICE62
ICE67
ICE76
ICE79
ICE80
ICE83
ICE86
ICE88
ICE91
ICE92
ICE97