Tabulka komponent
Tabulka Komponent obsahuje seznam součástí a obsahuje následující sloupce.
Sloupec | Typ | Klíč | Nullable |
---|---|---|---|
Komponenta | identifikátor | Y | N |
ComponentId | guid | N | Y |
Adresář_ | identifikátor | N | N |
Atributy | celočíselná | N | N |
Podmínka | podmínky | N | Y |
KeyPath | identifikátor | N | Y |
Sloupce
-
komponenta
-
Identifikuje záznam komponenty.
Primární klíč tabulky.
-
ComponentId
-
Identifikátor GUID řetězce jedinečný pro tuto komponentu, verzi a jazyk.
Všimněte si, že písmena těchto identifikátorů GUID musí být velká písmena. Nástroje, jako je GUIDGEN, můžou generovat identifikátory GUID obsahující malá písmena. Malá písmena musí být změněna na velká písmena, aby se tyto platné identifikátory GUID kódu komponenty změnily.
Pokud má tento sloupec hodnotu null, instalační program neregistruje komponentu a instalační program ji nemůže odebrat ani opravit. To může být záměrně provedeno, pokud je komponenta potřebná pouze během instalace, například vlastní akce, která vyčistí dočasné soubory nebo odebere starý produkt. Může být také užitečné při kopírování datových souborů do počítače uživatele, který není potřeba zaregistrovat.
-
Directory_
-
Externí klíč položky v tabulce adresářů . Jedná se o název vlastnosti, jejíž hodnota obsahuje skutečnou cestu, kterou může nastavit akce AppSearch nebo s výchozím nastavením získaným z tabulky Adresář.
Vývojáři se musí vyhnout vytváření součástí, které umístí soubory do jedné ze složek profilů uživatelů. Tyto soubory by nebyly dostupné všem uživatelům v situacích s více uživateli a mohly by způsobit, že instalační program trvale zobrazí komponentu jako součást vyžadující opravu.
Externí klíč ke sloupci jedné z tabulek adresářů
-
atributy
-
Tento sloupec obsahuje bitový příznak, který určuje možnosti vzdáleného spuštění. Přidejte zadaný bit k celkové hodnotě ve sloupci, aby obsahoval možnost.
Poznámka
V případě .msi souboru, který se stahuje z webového umístění, by neměly být příznaky atributů nastaveny tak, aby umožňovaly spuštění komponenty ze zdroje. Jedná se o omezení Instalační služby systému Windows a může vrátit stav funkce INSTALLSTATE_BADCONFIG.
Příznak bitu - msidbComponentAttributesLocalOnly
- 0
- 0x0000
- msidbComponentAttributesSourceOnly
- 1
- 0x0001
- msidbComponentAttributesOptional
- 2
- 0x0002
- msidbComponentAttributesRegistryKeyPath
- 4
- 0x0004
Nastavení tohoto bitu se doporučuje pro položky registru zapsané do podregistru HKCU. Tím se zajistí, že instalační program zapíše potřebné položky registru HKCU, pokud je na stejném počítači více uživatelů.- msidbComponentAttributesSharedDllRefCount
- 8
- 0x0008
- msidbComponentAttributesPermanent
- 16
- 0x0010
- msidbComponentAttributesODBCDataSource
- 32
- 0x0020
- msidbComponentAttributesTransitive
- 64
- 0x0040
Tento bit by měl být nastaven pouze pro tranzitivní komponenty. Viz použití tranzitivních komponent.- msidbComponentAttributesNeverOverwrite
- 128
- 0x0080
Tento příznak použijte pouze pro součásti, které jsou registrovány tabulkou registru. Tento příznak nepoužívejte pro komponenty registrované AppId, třídy, rozšíření, ProgId, MIMEa příkazové tabulky.- msidbComponentAttributes64bit
- 256
- 0x0100
Pokud se jedná o 64bitovou komponentu, která nahrazuje 32bitovou komponentu, nastavte tento bit a přiřaďte nový identifikátor GUID ve sloupci ComponentId.msidbComponentAttributesDisableRegistryReflection
512
0x0200
Nastavte tento bit tak, aby zakázal Reflexe registru u všech existujících a nových klíčů registru ovlivněných touto komponentou. Pokud je tento bit nastaven, Instalační služba systému Windows volá RegDisableReflectionKey na každém klíči, ke který přistupuje komponenta. Tento bit je k dispozici v Instalační službě systému Windows verze 4.0. Tento bit je ignorován v 32bitových systémech. Tento bit je ignorován v 64bitových verzích systému Windows XP.
Poznámka: 32bitové aplikace systému Windows spuštěné v 64bitovém emulátoru Systému Windows (WOW64) odkazují na jiné zobrazení registru než 64bitové aplikace. Reflexe registru kopíruje některé hodnoty registru mezi těmito dvěma zobrazeními registru.- msidbComponentAttributesUninstallOnSupersedence
- 1024
- 0x0400
Nastavení vlastnosti MSIUNINSTALLSUPERSEDEDCOMPONENTS má stejný účinek jako nastavení tohoto bitu pro všechny komponenty.
Instalační služba systému Windows 4.0 a starší: Hodnota msidbComponentAttributesUninstallOnSupersedence není podporována a je ignorována.- msidbComponentAttributesShared
- 2048
- 0x0800
Pokud je zásada DisableSharedComponent nastavená na hodnotu 1, tento bit nesdílí funkci sdílené komponenty.
Instalační služba systému Windows 4.0 a starší: Hodnota msidbComponentAttributesShared není podporována a je ignorována. -
podmínka
-
Tento sloupec obsahuje podmíněný příkaz, který může řídit, zda je komponenta nainstalována. Pokud je podmínka null nebo se vyhodnotí jako true, je komponenta povolená. Pokud se podmínka vyhodnotí jako Nepravda, je komponenta zakázaná a není nainstalovaná.
Pole Podmínka povolí nebo zakáže komponentu pouze během akce CostFinalize. Chcete-li povolit nebo zakázat součást po CostFinalize, musíte použít vlastní akci nebo DoAction ControlEvent volat MsiSetComponentState.
Mějte na paměti, že pokud není tranzitivní bit ve sloupci Atributy nastaven pro komponentu, zůstane komponenta po instalaci povolena i v případě, že podmíněný příkaz ve sloupci Podmínka později vyhodnotí hodnotu False při následné instalaci produktu.
Sloupec Podmínka v tabulce komponent přijímá podmíněné výrazy obsahující odkazy na nainstalované stavy funkcí a součástí. Informace o syntaxi podmíněných příkazů naleznete v tématu Syntaxe podmíněného příkazu.
-
KeyPath
-
Tato hodnota odkazuje na soubor nebo složku patřící komponentě, kterou instalační program používá k detekci komponenty. Dvě komponenty nemůžou sdílet stejnou hodnotu cesty ke klíči. Hodnota v tomto sloupci je také cesta vrácená funkcí MsiGetComponentPath.
Pokud hodnota není null, keyPath je buď primárním klíčem do registru, ODBCDataSourcenebo File tabulky v závislosti na hodnotě atributu. Pokud je cesta ke klíči null, použije se složka sloupce Directory_ jako cesta ke klíči.
Vzhledem k tomu, že složky vytvořené instalačním programem se odstraní, jakmile budou prázdné, musíte vytvořit položku do tabulky CreateFolder nainstalovat součást, která se skládá z prázdné složky.
Všimněte si, že pokud součást Instalační služby systému Windows obsahuje soubor nebo klíč registru, který je chráněný službou Windows Resource Protection (WRP) nebo souborem chráněným ochranou windows File Protection (WFP), musí být tento prostředek použit jako KlíčPath pro danou komponentu. V tomto případě instalační služba systému Windows nenainstaluje, neaktualizuje ani neodebere komponentu. Do instalačního balíčku byste neměli zahrnout žádné chráněné prostředky. Místo toho byste měli použít podporované mechanismy nahrazení prostředků pro Windows Resource Protection. Další informace naleznete v tématu Použití Instalační služby systému Windows a Windows Resource Protection.
Poznámky
Diskuzi o relaci mezi součástmi a funkcemi najdete v tématu Tabulka funkcí.
Instalační program sleduje sdílené knihovny DLL nezávisle na počtu odkazů sdílené knihovny DLL v registru. Pokud v registru existuje počet odkazů pro sdílenou knihovnu DLL, instalační program vždy zvýší počet při instalaci souboru a při odinstalaci ho sníží. Pokud msidbComponentAttributesSharedDllRefCount, není nastaven a počet odkazů ještě neexistuje, instalační program ho nevytvoří. Všimněte si, že počet odkazů sdílených knihoven DLL v registru se zvýší pro všechny soubory nainstalované do systémové složky.
Pokud msidbComponentAttributesSharedDllRefCount není nastavená, může jiná aplikace komponentu odebrat, i když je stále potřeba. Pokud chcete zjistit, jak by k tomu mohlo dojít, zvažte následující scénář:
- Aplikace, která používá instalační program, nainstaluje sdílenou komponentu.
- msidbComponentAttributesSharedDllRefCount bit není nastaven a neexistuje žádný počet odkazů. Instalační program tedy nezačne počet odkazů.
- Starší verze aplikace, která tuto komponentu sdílí a nepoužívá instalační program, je nainstalována.
- Starší verze aplikace vytvoří a zvýší počet odkazů pro sdílenou komponentu.
- Starší verze aplikace se odinstaluje.
- Počet odkazů pro sdílenou komponentu se sníží na nulu a komponenta se odebere.
- Aplikace, která používá instalační program, už nemá přístup ke komponentě.
Chcete-li se tomuto chování vyhnout, nastavte msidbComponentAttributesSharedDllRefCount.
Mějte na paměti, že součásti systémových služeb by neměly být určeny jako spustit ze zdroje, aniž by byly speciálně navrženy pro takové použití. Další podrobnosti najdete v tabulce ServiceInstall.
Mějte na paměti, že atributy, které umožňují instalaci typu run-from-source, by nikdy neměly být nastaveny pro komponenty obsahující knihovny dynamického propojení, které se nacházejí v systémové složce. Důvodem je, že pokud se stav instalace komponenty nastaví na spuštění ze zdroje pomocí funkce nebo nastavení v uživatelském rozhraní, následná volání LoadLibrary v knihovně DLL selžou.
Viz také řízení stavů výběru funkcí.