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
- msidbComponentAttributesSourceOnly
- 1
- 0x0001
- msidbComponentAttributesOptional
- 2
- 0x0002
- msidbComponentAttributesRegistryKeyPath
- 4
- 0x0004
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
- msidbComponentAttributesPermanent
- 16
- 0x0010
- msidbComponentAttributesODBCDataSource
- 32
- 0x0020
- msidbComponentAttributesTransitive
- 64
- 0x0040
Bit ini hanya boleh diatur untuk komponen transitif. Lihat Menggunakan Komponen Transitif.- msidbComponentAttributesNeverOverwrite
- 128
- 0x0080
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
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
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 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.