Tabela składników
Tabela Składnik zawiera listę składników i zawiera następujące kolumny.
Kolumna | Typ | Klucz | Nullable |
---|---|---|---|
Składnik | identyfikator | Y | N |
Identyfikator składnika | identyfikator GUID | N | Y |
Katalog_ | identyfikator | N | N |
Atrybuty | liczba całkowita | N | N |
Warunek | warunek | N | Y |
KeyPath | identyfikator | N | Y |
Kolumny
-
składnik
-
Identyfikuje rekord składnika.
Podstawowy klucz tabeli.
-
identyfikator składnika
-
Identyfikator GUID ciągu unikatowy dla tego składnika, wersji i języka.
Należy pamiętać, że litery tych identyfikatorów GUID muszą mieć wielkie litery. Narzędzia, takie jak GUIDGEN, mogą generować identyfikatory GUID zawierające małe litery. Małe litery muszą zostać zmienione na wielkie litery, aby były one prawidłowymi identyfikatorami GUID kodu składnika.
Jeśli ta kolumna ma wartość null, instalator nie zarejestruje składnika i nie można usunąć ani naprawić składnika przez instalatora. Może to być celowo zrobione, jeśli składnik jest potrzebny tylko podczas instalacji, na przykład akcja niestandardowa, która czyści pliki tymczasowe lub usuwa stary produkt. Może to być również przydatne podczas kopiowania plików danych na komputer użytkownika, który nie musi być zarejestrowany.
-
Directory_
-
Klucz zewnętrzny wpisu w tabeli usługi Directory. Jest to nazwa właściwości, której wartość zawiera rzeczywistą ścieżkę, którą można ustawić za pomocą akcji AppSearch lub z ustawieniem domyślnym uzyskanym z tabeli Katalog.
Deweloperzy muszą unikać tworzenia składników, które umieszczają pliki w jednym z folderów Profil użytkownika. Te pliki nie będą dostępne dla wszystkich użytkowników w sytuacjach wielu użytkowników i mogą spowodować, że instalator trwale wyświetli składnik jako wymagający naprawy.
Klucz zewnętrzny do kolumny jednej z tabeli Katalog.
-
atrybuty
-
Ta kolumna zawiera flagę bitową, która określa opcje wykonywania zdalnego. Dodaj wskazany bit do wartości całkowitej w kolumnie, aby uwzględnić opcję.
Nuta
W przypadku pliku .msi, który jest pobierany z lokalizacji internetowej, flagi atrybutów nie powinny być ustawione tak, aby umożliwić uruchamianie składnika ze źródła. Jest to ograniczenie Instalatora Windows i może zwrócić stan funkcji INSTALLSTATE_BADCONFIG.
Flaga bitowa - msidbComponentAttributesLocalOnly
- 0
- 0x0000
- msidbComponentAttributesSourceOnly
- 1
- 0x0001
- msidbComponentAttributesOptional
- 2
- 0x0002
- msidbComponentAttributesRegistryKeyPath
- 4
- 0x0004
Ustawienie tego bitu jest zalecane w przypadku wpisów rejestru zapisanych w gałęzi HKCU. Dzięki temu instalator zapisuje niezbędne wpisy rejestru HKCU, gdy na tym samym komputerze jest wielu użytkowników.- msidbComponentAttributesSharedDllRefCount
- 8
- 0x0008
- msidbComponentAttributesPermanent
- 16
- 0x0010
- msidbComponentAttributesODBCDataSource
- 32
- 0x0020
- msidbComponentAttributesTransitive
- 64
- 0x0040
Ten bit powinien być ustawiany tylko dla składników przechodnich. Zobacz using Transitive Components.- msidbComponentAttributesNeverOverwrite
- 128
- 0x0080
Tej flagi należy używać tylko w przypadku składników zarejestrowanych w tabeli Rejestru. Nie używaj tej flagi dla składników zarejestrowanych przez AppId, , Extension, ProgId, MIMEi Verb tables.- msidbComponentAttributes64bit
- 256
- 0x0100
Jeśli jest to składnik 64-bitowy zastępujący składnik 32-bitowy, ustaw ten bit i przypisz nowy identyfikator GUID w kolumnie ComponentId.msidbComponentAttributesDisableRegistryReflection
512
0x0200
Ustaw ten bit, aby wyłączyć odbicie rejestru na wszystkich istniejących i nowych kluczach rejestru, których dotyczy ten składnik. Jeśli ten bit jest ustawiony, Instalator Windows wywołuje RegDisableReflectionKey dla każdego klucza, do którego uzyskuje dostęp składnik. Ten bit jest dostępny w Instalatorze Windows w wersji 4.0. Ten bit jest ignorowany w systemach 32-bitowych. Ten bit jest ignorowany w 64-bitowych wersjach systemu Windows XP.
Uwaga: 32-bitowych aplikacji systemu Windows działających w 64-bitowym emulatorze systemu Windows (WOW64) odwołuje się do innego widoku rejestru niż aplikacje 64-bitowe. Odbicie rejestru kopiuje niektóre wartości rejestru między tymi dwoma widokami rejestru.- msidbComponentAttributesUninstallOnSupersedence
- 1024
- 0x0400
Ustawienie właściwości MSIUNINSTALLSUPERSEDEDCOMPONENTS ma taki sam efekt jak ustawienie tego bitu dla wszystkich składników.
Instalatora Windows 4.0 i wcześniejszych: wartość msidbComponentAttributesUninstallOnSupersed ence nie jest obsługiwana i ignorowana.- msidbComponentAttributesShared
- 2048
- 0x0800
Jeśli dla zasad DisableSharedComponent ustawiono wartość 1, żaden pakiet nie pobiera funkcji składnika udostępnionego włączonego przez ten bit.
Instalatora Windows 4.0 i starszych: wartość msidbComponentAttributesShared nie jest obsługiwana i jest ignorowana. -
warunek
-
Ta kolumna zawiera instrukcję warunkową, która może kontrolować, czy składnik jest zainstalowany. Jeśli warunek ma wartość null lub ma wartość true, składnik jest włączony. Jeśli warunek ma wartość False, składnik jest wyłączony i nie jest zainstalowany.
Pole Warunek włącza lub wyłącza składnik tylko podczas akcji CostFinalize. Aby włączyć lub wyłączyć składnik po parametrze CostFinalize, należy użyć akcji niestandardowej lub Kontrolka DoAction, aby wywołać MsiSetComponentState.
Należy pamiętać, że jeśli bit przejściowy w kolumnie Atrybuty jest ustawiony dla składnika, składnik pozostaje włączony po zainstalowaniu, nawet jeśli instrukcja warunkowa w kolumnie Warunek później zwróci wartość False podczas kolejnej instalacji produktu.
Kolumna Warunek w tabeli Składnik akceptuje wyrażenia warunkowe zawierające odwołania do zainstalowanych stanów funkcji i składników. Aby uzyskać informacje na temat składni instrukcji warunkowych, zobacz Składnia instrukcji warunkowej.
-
KeyPath
-
Ta wartość wskazuje plik lub folder należący do składnika, którego instalator używa do wykrywania składnika. Dwa składniki nie mogą współdzielić tej samej wartości ścieżki klucza. Wartość w tej kolumnie jest również ścieżką zwracaną przez funkcję MsiGetComponentPath.
Jeśli wartość nie ma wartości null, parametr KeyPath jest kluczem podstawowym w Registry, ODBCDataSourcelub Tabele plików w zależności od wartości Atrybut. Jeśli parametr KeyPath ma wartość null, folder kolumny Directory_ jest używany jako ścieżka klucza.
Ponieważ foldery utworzone przez instalatora są usuwane, gdy staną się puste, należy utworzyć wpis w tabeli CreateFolder, aby zainstalować składnik składający się z pustego folderu.
Należy pamiętać, że jeśli składnik Instalatora Windows zawiera plik lub klucz rejestru chroniony przez usługę Windows Resource Protection (WRP) lub plik chroniony przez ochronę plików systemu Windows (WFP), ten zasób musi być używany jako ścieżka keypath dla składnika. W takim przypadku Instalator Windows nie instaluje, aktualizuje ani nie usuwa składnika. W pakiecie instalacyjnym nie należy uwzględniać żadnych chronionych zasobów. Zamiast tego należy użyć obsługiwanych mechanizmów wymiany zasobów dla usługi Windows Resource Protection. Aby uzyskać więcej informacji, zobacz Using Windows Installer and Windows Resource Protection.
Uwagi
Aby zapoznać się z omówieniem relacji między składnikami i funkcjami, zobacz Feature Table.
Instalator śledzi udostępnione biblioteki DLL niezależnie od udostępnionej liczby odwołań bibliotek DLL w rejestrze. Jeśli w rejestrze istnieje liczba odwołań dla udostępnionej biblioteki DLL, instalator zawsze zwiększa liczbę podczas instalowania pliku i dekrementuje go podczas jego odinstalowywania. Jeśli msidbComponentAttributesSharedDllRefCount, nie jest ustawiona, a liczba odwołań nie istnieje, instalator nie utworzy go. Należy pamiętać, że liczba odwołań sharedDLLs w rejestrze jest zwiększana dla wszystkich plików zainstalowanych w folderze System.
Jeśli msidbComponentAttributesSharedDllRefCount nie jest ustawiona, inna aplikacja może usunąć składnik, nawet jeśli jest nadal potrzebny. Aby zobaczyć, jak może się to zdarzyć, rozważ następujący scenariusz:
- Aplikacja korzystająca z instalatora instaluje składnik udostępniony.
- msidbComponentAttributesSharedDllRefCount bit nie jest ustawiony i nie ma liczby odwołań. W związku z tym instalator nie rozpoczyna liczby odwołań.
- Starsza aplikacja, która udostępnia ten składnik i nie korzysta z instalatora, jest zainstalowana.
- Starsza aplikacja tworzy i zwiększa liczbę odwołań dla składnika udostępnionego.
- Starsza aplikacja zostanie odinstalowana.
- Liczba odwołań dla składnika udostępnionego jest dekrementowana do zera, a składnik jest usuwany.
- Aplikacja korzystająca z instalatora nie ma już dostępu do składnika.
Aby uniknąć tego zachowania, ustaw msidbComponentAttributesSharedDllRefCount.
Należy pamiętać, że nie należy określać składników usług systemowych jako elementów run-from-source bez specjalnie zaprojektowanych do takiego użycia. Aby uzyskać więcej informacji, zobacz tabelę ServiceInstall.
Należy pamiętać, że atrybuty umożliwiające instalację typu run-from-source nigdy nie powinny być ustawiane dla składników zawierających biblioteki łącza dynamicznego, które przechodzą do folderu systemowego. Przyczyną jest to, że jeśli stan instalacji składnika zostanie ustawiony na uruchamianie ze źródła przez wykonanie funkcji lub przez ustawienie w interfejsie użytkownika, kolejne wywołania LoadLibrary w dll zakończy się niepowodzeniem.
Zobacz również kontrolowanie stanów wyboru funkcji.