Komponenttabell
Tabellen Komponent visar komponenter och innehåller följande kolumner.
Spalt | Typ | Nyckel | Nullbar |
---|---|---|---|
Komponent | identifierare | Y | N |
ComponentId | GUID- | N | Y |
Katalog_ | identifierare | N | N |
Attribut | Heltal | N | N |
Tillstånd | Villkor | N | Y |
KeyPath | identifierare | N | Y |
Kolumner
-
komponent
-
Identifierar komponentposten.
Primär tabellnyckel.
-
ComponentId
-
Ett sträng-GUID som är unikt för den här komponenten, versionen och språket.
Observera att bokstäverna i dessa GUID måste vara versaler. Verktyg som GUIDGEN kan generera GUID som innehåller gemener. Gemener måste ändras till versaler för att dessa giltiga komponentkods-GUID:er ska kunna användas.
Om den här kolumnen är null registrerar installationsprogrammet inte komponenten och komponenten kan inte tas bort eller repareras av installationsprogrammet. Detta kan göras avsiktligt om komponenten bara behövs under installationen, till exempel en anpassad åtgärd som rensar temporära filer eller tar bort en gammal produkt. Det kan också vara användbart när du kopierar datafiler till en användares dator som inte behöver registreras.
-
Directory_
-
Extern nyckel för en post i tabellen Directory. Det här är ett egenskapsnamn vars värde innehåller den faktiska sökvägen, som kan anges antingen av åtgärden AppSearch eller med standardinställningen som hämtas från tabellen Katalog.
Utvecklare måste undvika att redigera komponenter som placerar filer i någon av användarprofilmapparna. Dessa filer skulle inte vara tillgängliga för alla användare i situationer med flera användare och kan leda till att installationsprogrammet permanent visar komponenten som kräver reparation.
Extern nyckel till kolumn ett av katalogtabellen.
-
attribut
-
Den här kolumnen innehåller en bitflagga som anger alternativ för fjärrkörning. Lägg till den angivna biten i det totala värdet i kolumnen för att inkludera ett alternativ.
Not
Om en .msi fil som laddas ned från en webbplats ska attributflaggor inte anges så att en komponent kan köras från källan. Det här är en begränsning för Windows Installer och kan returnera ett funktionstillstånd för INSTALLSTATE_BADCONFIG.
Bitflagga - msidbComponentAttributesLocalOnly
- 0
- 0x0000
- msidbComponentAttributesSourceOnly
- 1
- 0x0001
- msidbComponentAttributesOptional
- 2
- 0x0002
- msidbComponentAttributesRegistryKeyPath
- 4
- 0x0004
Att ange den här biten rekommenderas för registerposter som skrivits till HKCU-registreringsdatafilen. Detta säkerställer att installationsprogrammet skriver nödvändiga HKCU-registerposter när det finns flera användare på samma dator.- msidbComponentAttributesSharedDllRefCount
- 8
- 0x0008
- msidbComponentAttributesPermanent
- 16
- 0x0010
- msidbComponentAttributesODBCDataSource
- 32
- 0x0020
- msidbComponentAttributesTransitive
- 64
- 0x0040
Den här biten ska bara anges för transitiva komponenter. Se använda transitiva komponenter.- msidbComponentAttributesNeverOverwrite
- 128
- 0x0080
Använd endast den här flaggan för komponenter som registreras av registertabellen. Använd inte den här flaggan för komponenter som registrerats av AppId, Class, Extension, ProgId, MIMEoch Verb-tabeller.- msidbComponentAttributes64bit
- 256
- 0x0100
Om det här är en 64-bitars komponent som ersätter en 32-bitarskomponent anger du den här biten och tilldelar ett nytt GUID i kolumnen ComponentId.msidbComponentAttributesDisableRegistryReflection
512
0x0200
Ange den här biten för att inaktivera Registry Reflection på alla befintliga och nya registernycklar som påverkas av den här komponenten. Om den här biten har angetts anropar Windows Installer RegDisableReflectionKey på varje nyckel som används av komponenten. Den här biten är tillgänglig med Windows Installer version 4.0. Den här biten ignoreras på 32-bitarssystem. Den här biten ignoreras i 64-bitarsversionerna av Windows XP.
Obs! 32-bitars Windows-program som körs på 64-bitars Windows-emulatorn (WOW64) refererar till en annan vy av registret än 64-bitarsprogram. Registerreflektion kopierar vissa registervärden mellan dessa två registervyer.- msidbComponentAttributesUninstallOnSupersedence
- 1024
- 0x0400
Att ange egenskapen MSIUNINSTALLSUPERSEDEDCOMPONENTS har samma effekt som att ange den här biten för alla komponenter.
Windows Installer 4.0 och tidigare: Värdet msidbComponentAttributesUninstallOnSupersedence stöds inte och ignoreras.- msidbComponentAttributesShared
- 2048
- 0x0800
Om principen DisableSharedComponent är inställd på 1, får inget paket de delade komponentfunktioner som aktiveras av den här biten.
Windows Installer 4.0 och tidigare: värdet msidbComponentAttributesShared stöds inte och ignoreras. -
villkor
-
Den här kolumnen innehåller en villkorsstyrd instruktion som kan styra om en komponent är installerad. Om villkoret är null eller utvärderas till sant aktiveras komponenten. Om villkoret utvärderas till False inaktiveras komponenten och installeras inte.
Fältet Villkor aktiverar eller inaktiverar endast en komponent under åtgärden CostFinalize. Om du vill aktivera eller inaktivera en komponent efter CostFinalize måste du använda en anpassad åtgärd eller DoAction ControlEvent- för att anropa MsiSetComponentState.
Observera att om inte den transitiva biten i kolumnen Attribut har angetts för en komponent förblir komponenten aktiverad när den har installerats även om villkorssatsen i kolumnen Villkor senare utvärderas till False vid en efterföljande underhållsinstallation av produkten.
Kolumnen Villkor i tabellen Komponent accepterar villkorsuttryck som innehåller referenser till installerade tillstånd för funktioner och komponenter. Information om syntaxen för villkorsstyrda instruktioner finns i Syntax för villkorsstyrd instruktion.
-
KeyPath
-
Det här värdet pekar på en fil eller mapp som tillhör komponenten som installationsprogrammet använder för att identifiera komponenten. Två komponenter kan inte dela samma nyckelsökvägsvärde. Värdet i den här kolumnen är också sökvägen som returneras av funktionen MsiGetComponentPath.
Om värdet inte är null är KeyPath antingen en primärnyckel i Registry, ODBCDataSourceeller Filtabeller beroende på attributets värde. Om KeyPath är null används mappen för kolumnen Directory_ som nyckelsökväg.
Eftersom mappar som skapas av installationsprogrammet tas bort när de blir tomma måste du skapa en post i tabellen CreateFolder för att installera en komponent som består av en tom mapp.
Observera att om en Windows Installer-komponent innehåller en fil eller registernyckel som skyddas av Windows Resource Protection (WRP) eller en fil som skyddas av Windows File Protection (WFP), måste den här resursen användas som KeyPath för komponenten. I det här fallet installerar, uppdaterar eller tar inte Windows Installer bort komponenten. Du bör inte inkludera några skyddade resurser i ett installationspaket. I stället bör du använda resursersättningsmekanismer som stöds för Windows Resource Protection. Mer information finns i Using Windows Installer and Windows Resource Protection.
Anmärkningar
En diskussion om relationen mellan komponenter och funktioner finns i Funktionstabell.
Installationsprogrammet håller reda på delade DLL:er oberoende av det delade DLL-referensantalet i registret. Om det finns ett referensantal för en delad DLL i registret ökar installationsprogrammet alltid antalet när den installerar filen och minskar den när den avinstalleras. Om msidbComponentAttributesSharedDllRefCount, inte har angetts och referensantalet inte redan finns, skapar installationsprogrammet inte ett. Observera att referensantalet delade DLL:er i registret ökas för alla filer som är installerade i systemmappen.
Om msidbComponentAttributesSharedDllRefCount inte har angetts kan ett annat program ta bort komponenten även om den fortfarande behövs. Om du vill se hur detta kan inträffa bör du tänka på följande scenario:
- Ett program som använder installationsprogrammet installerar en delad komponent.
- msidbComponentAttributesSharedDllRefCount bit har inte angetts och det finns inget referensantal. Installationsprogrammet påbörjar därför inte ett referensantal.
- Ett äldre program som delar den här komponenten och inte använder installationsprogrammet är installerat.
- Det äldre programmet skapar och ökar ett referensantal för den delade komponenten.
- Det äldre programmet avinstalleras.
- Referensantalet för den delade komponenten minskas till noll och komponenten tas bort.
- Programmet som använder installationsprogrammet har inte längre åtkomst till komponenten.
Undvik det här beteendet genom att ange msidbComponentAttributesSharedDllRefCount.
Observera att systemtjänstkomponenter inte bör anges som run-from-source utan att vara särskilt utformade för sådan användning. Mer information finns i tabellen ServiceInstall.
Observera att attribut som aktiverar installation av run-from-source aldrig bör anges för komponenter som innehåller dynamiska länkbibliotek som går in i systemmappen. Anledningen är att om installationstillståndet för komponenten ställs in på körning från källa genom att följa en funktion eller genom att anges i användargränssnittet misslyckas efterföljande anrop till LoadLibrary- på DLL:en.
Se även Kontrollera funktionsvalstillstånd.