Onderdeeltabel
De tabel Component bevat onderdelen en bevat de volgende kolommen.
Kolom | Type | Sleutel | Null-waarde |
---|---|---|---|
Bestanddeel | id- | Y | N |
ComponentId | GUID- | N | Y |
Map_ | id- | N | N |
Kenmerken | geheel getal | N | N |
Conditie | voorwaarde | N | Y |
KeyPath | id- | N | Y |
Kolommen
-
-onderdeel
-
Identificeert de onderdeelrecord.
Primaire tabelsleutel.
-
ComponentId
-
Een tekenreeks-GUID die uniek is voor dit onderdeel, de versie en de taal.
Houd er rekening mee dat de letters van deze GUID's hoofdletters moeten zijn. Hulpprogramma's zoals GUIDGEN kunnen GUIDGEN's genereren die kleine letters bevatten. De kleine letters moeten worden gewijzigd in hoofdletters om deze geldige onderdeelcode-GUID's te maken.
Als deze kolom null is, registreert het installatieprogramma het onderdeel niet en kan het onderdeel niet worden verwijderd of hersteld door het installatieprogramma. Dit kan opzettelijk worden gedaan als het onderdeel alleen nodig is tijdens de installatie, zoals een aangepaste actie waarmee tijdelijke bestanden worden opgeschoond of een oud product wordt verwijderd. Het kan ook handig zijn bij het kopiëren van gegevensbestanden naar de computer van een gebruiker die niet hoeven te worden geregistreerd.
-
Directory_
-
Externe sleutel van een vermelding in de Directory-tabel. Dit is een eigenschapsnaam waarvan de waarde het werkelijke pad bevat, dat kan worden ingesteld door de actie AppSearch of met de standaardinstelling die is verkregen uit de maptabel.
Ontwikkelaars moeten voorkomen dat er onderdelen worden gemaakt die bestanden in een van de mappen Gebruikersprofiel plaatsen. Deze bestanden zouden niet beschikbaar zijn voor alle gebruikers in situaties met meerdere gebruikers en kunnen ertoe leiden dat het installatieprogramma het onderdeel permanent kan weergeven als herstel vereist.
Externe sleutel naar kolom één van de maptabel.
-
kenmerken
-
Deze kolom bevat een bitvlag waarmee opties voor externe uitvoering worden opgegeven. Voeg de aangegeven bit toe aan de totale waarde in de kolom om een optie op te nemen.
Notitie
In het geval van een .msi-bestand dat wordt gedownload van een weblocatie, mogen de kenmerkvlagken niet worden ingesteld om toe te staan dat een onderdeel wordt uitgevoerd vanaf de bron. Dit is een beperking van Windows Installer en kan een functiestatus van INSTALLSTATE_BADCONFIG retourneren.
Bit-vlag - msidbComponentAttributesLocalOnly-
- 0
- 0x0000
- msidbComponentAttributesSourceOnly-
- 1
- 0x0001
- msidbComponentAttributesOptional-
- 2
- 0x0002
- msidbComponentAttributesRegistryKeyPath
- 4
- 0x0004
Het instellen van deze bit wordt aanbevolen voor registervermeldingen die naar de HKCU-component zijn geschreven. Dit zorgt ervoor dat het installatieprogramma de benodigde HKCU-registervermeldingen schrijft wanneer er meerdere gebruikers op dezelfde computer zijn.- msidbComponentAttributesSharedDllRefCount
- 8
- 0x0008
- msidbComponentAttributesPermanent
- 16
- 0x0010
- msidbComponentAttributesODBCDataSource
- 32
- 0x0020
- msidbComponentAttributesTransitive-
- 64
- 0x0040
Deze bit mag alleen worden ingesteld voor transitieve onderdelen. Zie Transitive Components gebruiken.- msidbComponentAttributesNeverOverwrite
- 128
- 0x0080
Gebruik deze vlag alleen voor onderdelen die worden geregistreerd door de registertabel. Gebruik deze vlag niet voor onderdelen die zijn geregistreerd door de AppId, Class, Extension, ProgId, MIME-en Werkwoordtabellen.- msidbComponentAttributes64bit
- 256
- 0x0100
Als dit een 64-bits onderdeel is dat een 32-bits onderdeel vervangt, stelt u deze bit in en wijst u een nieuwe GUID toe in de kolom ComponentId.msidbComponentAttributesDisableRegistryReflection
512
0x0200
Stel deze bit in om registerspiegeling uit te schakelen op alle bestaande en nieuwe registersleutels die door dit onderdeel worden beïnvloed. Als deze bit is ingesteld, roept Windows Installer de RegDisableReflectionKey aan op elke sleutel die wordt geopend door het onderdeel. Deze bit is beschikbaar met Windows Installer versie 4.0. Deze bit wordt genegeerd op 32-bits systemen. Deze bit wordt genegeerd in de 64-bits versies van Windows XP.
Opmerking: 32-bits Windows-toepassingen die worden uitgevoerd op de 64-bits Windows-emulator (WOW64) verwijzen naar een andere weergave van het register dan 64-bits toepassingen. Registerspiegeling kopieert enkele registerwaarden tussen deze twee registerweergaven.- msidbComponentAttributesUninstallOnSupersedence
- 1024
- 0x0400
Het instellen van de eigenschap MSIUNINSTALLSUPERSEDEDCOMPONENTS heeft hetzelfde effect als het instellen van deze bit voor alle onderdelen.
Windows Installer 4.0 en eerder: De msidbComponentAttributesUninstallOnSupersedence waarde wordt niet ondersteund en wordt genegeerd.- msidbComponentAttributesShared-
- 2048
- 0x0800
Als het beleid DisableSharedComponent is ingesteld op 1, wordt de functionaliteit voor gedeelde onderdelen niet door deze bit ingeschakeld.
Windows Installer 4.0 en eerdere: De waarde msidbComponentAttributesSharedSharedShare d wordt niet ondersteund en wordt genegeerd. -
voorwaarde voor
-
Deze kolom bevat een voorwaardelijke instructie waarmee kan worden bepaald of een onderdeel is geïnstalleerd. Als de voorwaarde null is of waar oplevert, wordt het onderdeel ingeschakeld. Als de voorwaarde Onwaar is, wordt het onderdeel uitgeschakeld en niet geïnstalleerd.
Het veld Voorwaarde schakelt een onderdeel alleen in of uit tijdens de actie CostFinalize. Als u een onderdeel wilt in- of uitschakelen na CostFinalize, moet u een aangepaste actie of de DoAction ControlEvent- gebruiken om MsiSetComponentState-aan te roepen.
Houd er rekening mee dat, tenzij de transitieve bit in de kolom Kenmerken is ingesteld voor een onderdeel, het onderdeel eenmaal is ingeschakeld, zelfs als de voorwaardelijke instructie in de kolom Voorwaarde later resulteert in Onwaar bij een volgende onderhoudsinstallatie van het product.
De kolom Voorwaarde in de tabel Component accepteert voorwaardelijke expressies die verwijzingen bevatten naar de geïnstalleerde statussen van functies en onderdelen. Zie syntaxis van voorwaardelijke instructievoor meer informatie over de syntaxis van voorwaardelijke instructies.
-
KeyPath
-
Deze waarde verwijst naar een bestand of map die hoort bij het onderdeel dat het installatieprogramma gebruikt om het onderdeel te detecteren. Twee onderdelen kunnen niet dezelfde sleutelpadwaarde delen. De waarde in deze kolom is ook het pad dat wordt geretourneerd door de MsiGetComponentPath-functie.
Als de waarde niet null is, is KeyPath een primaire sleutel in het Register, ODBCDataSourceof Bestandstabellen, afhankelijk van de waarde Kenmerk. Als KeyPath null is, wordt de map van de Directory_ kolom gebruikt als het sleutelpad.
Omdat mappen die door het installatieprogramma zijn gemaakt, worden verwijderd wanneer ze leeg zijn, moet u een vermelding in de tabel CreateFolder maken om een onderdeel te installeren dat uit een lege map bestaat.
Als een Windows Installer-onderdeel een bestand of registersleutel bevat die wordt beveiligd door Windows Resource Protection (WRP) of een bestand dat wordt beveiligd door Windows File Protection (WFP), moet deze resource worden gebruikt als KeyPath voor het onderdeel. In dit geval wordt het onderdeel niet door Windows Installer geïnstalleerd, bijgewerkt of verwijderd. U moet geen beveiligde resources opnemen in een installatiepakket. In plaats daarvan moet u de ondersteunde mechanismen voor resourcevervanging gebruiken voor Windows Resource Protection. Zie Windows Installer en Windows Resource Protection gebruikenvoor meer informatie.
Opmerkingen
Zie Functietabelvoor een bespreking van de relatie tussen onderdelen en functies.
Het installatieprogramma houdt gedeelde DLL's onafhankelijk van het aantal gedeelde DLL-verwijzingen in het register bij. Als er een verwijzingsaantal voor een gedeelde DLL bestaat in het register, wordt het aantal altijd verhoogd wanneer het bestand wordt geïnstalleerd en wordt het verwijderd wanneer het wordt verwijderd. Als msidbComponentAttributesSharedDllRefCount, niet is ingesteld en het aantal verwijzingen nog niet bestaat, maakt het installatieprogramma er geen. Houd er rekening mee dat het aantal sharedDLLs-verwijzingen in het register wordt verhoogd voor alle bestanden die zijn geïnstalleerd in de map Systeem.
Als msidbComponentAttributesSharedDllRef Count niet is ingesteld, kan een andere toepassing het onderdeel verwijderen, zelfs als dit nog nodig is. Bekijk het volgende scenario om te zien hoe dit kan gebeuren:
- Een toepassing die gebruikmaakt van het installatieprogramma installeert een gedeeld onderdeel.
- De msidbComponentAttributesSharedDllRefCount bit is niet ingesteld en er is geen verwijzingsaantal. Het installatieprogramma begint dus niet met een verwijzingsaantal.
- Een verouderde toepassing die dit onderdeel deelt en het installatieprogramma niet gebruikt, wordt geïnstalleerd.
- Met de verouderde toepassing wordt een verwijzingsaantal voor het gedeelde onderdeel gemaakt en verhoogd.
- De verouderde toepassing wordt verwijderd.
- Het aantal verwijzingen voor het gedeelde onderdeel wordt afgebroken tot nul en het onderdeel wordt verwijderd.
- De toepassing die het installatieprogramma gebruikt, heeft geen toegang meer tot het onderdeel.
U kunt dit gedrag voorkomen door msidbComponentAttributesSharedDllRefCountin te stellen.
Houd er rekening mee dat systeemservicesonderdelen niet als run-from-source moeten worden opgegeven zonder specifiek te zijn ontworpen voor dergelijk gebruik. Zie de tabel ServiceInstall voor meer informatie.
Houd er rekening mee dat kenmerken die uitvoeren vanaf de broninstallatie inschakelen nooit moeten worden ingesteld voor onderdelen die dynamische-koppelingsbibliotheken bevatten die naar de systeemmap gaan. De reden hiervoor is dat als de installatiestatus van het onderdeel wordt ingesteld op uitvoeren vanaf de bron door een functie te volgen of door in de gebruikersinterface te worden ingesteld, volgende aanroepen naar LoadLibrary- in het DLL-bestand mislukken.
Zie ook Controle van functieselectiestatussen.