Tabella componente
La tabella Component elenca i componenti e contiene le colonne seguenti.
Colonna | Tipo | Chiave | Nullable |
---|---|---|---|
Componente | Identificatore | S | N |
Componentid | GUID | N | S |
Directory_ | Identificatore | N | N |
Attributi | Integer | N | N |
Condizione | Condition | N | S |
KeyPath | Identificatore | N | S |
Colonne
-
Componente
-
Identifica il record del componente.
Chiave della tabella primaria.
-
Componentid
-
GUID di stringa univoco per questo componente, versione e lingua.
Si noti che le lettere di questi GUID devono essere maiuscole. Le utilità come GUIDGEN possono generare GUIDD contenenti lettere minuscole. Le lettere minuscole devono essere modificate in maiuscolo per rendere questi GUID di codice del componente validi.
Se questa colonna è Null, il programma di installazione non registra il componente e il componente non può essere rimosso o ripristinato dal programma di installazione. Questa operazione può essere eseguita intenzionalmente se il componente è necessario solo durante l'installazione, ad esempio un'azione personalizzata che pulisce i file temporanei o rimuove un vecchio prodotto. Può essere utile anche quando si copiano i file di dati in un computer dell'utente che non devono essere registrati.
-
Directory_
-
Chiave esterna di una voce nella tabella Directory. Si tratta di un nome di proprietà il cui valore contiene il percorso effettivo, che può essere impostato dall'azione AppSearch o con l'impostazione predefinita ottenuta dalla tabella Directory.
Gli sviluppatori devono evitare la creazione di componenti che inserisce i file in una delle cartelle profilo utente. Questi file non sarebbero disponibili per tutti gli utenti in situazioni multiutente e potrebbero causare la visualizzazione permanente del componente come richiesta di ripristino.
Chiave esterna alla colonna una della tabella Directory.
-
Attributi
-
Questa colonna contiene un flag bit che specifica le opzioni per l'esecuzione remota. Aggiungere il bit indicato al valore totale nella colonna per includere un'opzione.
Nota
Nel caso di un file di .msi scaricato da un percorso Web, i flag di attributo non devono essere impostati per consentire l'esecuzione di un componente da origine. Si tratta di una limitazione del programma di installazione di Windows e può restituire uno stato di funzionalità di INSTALLSTATE_BADCONFIG.
Flag bit - msidbComponentAttributesLocalOnly
- 0
- 0x0000
- msidbComponentAttributesSourceOnly
- 1
- 0x0001
- msidbComponentAttributesOptional
- 2
- 0x0002
- msidbComponentAttributesRegistryKeyPath
- 4
- 0x0004
L'impostazione di questo bit è consigliata per le voci del Registro di sistema scritte nell'hive HKCU. Ciò garantisce che il programma di installazione scrive le voci del Registro di sistema HKCU necessarie quando sono presenti più utenti nello stesso computer.- msidbComponentAttributesSharedDllRefCount
- 8
- 0x0008
- msidbComponentAttributesPermanent
- 16
- 0x0010
- msidbComponentAttributesODBCDataSource
- 32
- 0x0020
- msidbComponentAttributesTransitive
- 64
- 0x0040
Questo bit deve essere impostato solo per i componenti transitivi. Vedere Uso di componenti transitivi.- msidbComponentAttributesNeverOverwrite
- 128
- 0x0080
Usare questo flag solo per i componenti registrati dalla tabella Del Registro di sistema. Non usare questo flag per i componenti registrati dalle tabelle AppId, Class, Extension, ProgId, MIME e Verb.- msidbComponentAttributes64bit
- 256
- 0x0100
Se si tratta di un componente a 64 bit che sostituisce un componente a 32 bit, impostare questo bit e assegnare un nuovo GUID nella colonna ComponentId.- msidbComponentAttributesDisableRegistryReflection
- 512
- 0x0200
[! Nota]
Le applicazioni Windows a 32 bit in esecuzione nell'emulatore di Windows a 64 bit (WOW64) fanno riferimento a una visualizzazione diversa del Registro di sistema rispetto alle applicazioni a 64 bit. La reflection del Registro di sistema copia alcuni valori del Registro di sistema tra queste due viste del Registro di sistema.- msidbComponentAttributesUninstallOnSupersedence
- 1024
- 0x0400
L'impostazione della proprietà MSIUNINSTALLSUPERSEDEDCOMPONENTS ha lo stesso effetto dell'impostazione di questo bit per tutti i componenti.
Windows Installer 4.0 e versioni precedenti: Il valore msidbComponentAttributesUninstallOnSupersedence non è supportato e viene ignorato.- msidbComponentAttributesShared
- 2048
- 0x0800
Se il criterio DisableSharedComponent è impostato su 1, nessun pacchetto ottiene la funzionalità del componente condiviso abilitata da questo bit.
Windows Installer 4.0 e versioni precedenti: Il valore msidbComponentAttributesShared non è supportato e viene ignorato. -
Condizione
-
Questa colonna contiene un'istruzione condizionale in grado di controllare se è installato un componente. Se la condizione è Null o restituisce true, il componente viene abilitato. Se la condizione restituisce False, il componente viene disabilitato e non è installato.
Il campo Condizione abilita o disabilita un componente solo durante l'azione CostFinalize. Per abilitare o disabilitare un componente dopo CostFinalize, è necessario usare un'azione personalizzata o doAction ControlEvent per chiamare MsiSetComponentState.
Si noti che, a meno che il bit transitivo nella colonna Attributi non sia impostato per un componente, il componente rimane abilitato una volta installato anche se l'istruzione condizionale nella colonna Condizione restituisce Successivamente False in un'installazione di manutenzione successiva del prodotto.
La colonna Condizione nella tabella Component accetta espressioni condizionali contenenti riferimenti agli stati installati di funzionalità e componenti. Per informazioni sulla sintassi delle istruzioni condizionali, vedere Sintassi dell'istruzione condizionale.
-
KeyPath
-
Questo valore punta a un file o a una cartella appartenente al componente utilizzato dal programma di installazione per rilevare il componente. Due componenti non possono condividere lo stesso valore del percorso della chiave. Il valore in questa colonna è anche il percorso restituito dalla funzione MsiGetComponentPath .
Se il valore non è Null, KeyPath è una chiave primaria nelle tabelle Registry, ODBCDataSource o File a seconda del valore attribute. Se KeyPath è Null, la cartella della colonna Directory_ viene usata come percorso della chiave.
Poiché le cartelle create dal programma di installazione vengono eliminate quando diventano vuote, è necessario creare una voce nella tabella CreateFolder per installare un componente costituito da una cartella vuota.
Si noti che se un componente del programma di installazione di Windows contiene un file o una chiave del Registro di sistema protetta da Windows Resource Protection (WRP) o un file protetto da Windows File Protection (WFP), questa risorsa deve essere usata come KeyPath per il componente. In questo caso, Windows Programma di installazione non installa, aggiorna o rimuove il componente. Non includere risorse protette in un pacchetto di installazione. È invece consigliabile usare i meccanismi di sostituzione delle risorse supportati per Windows Resource Protection. Per altre informazioni, vedere Using Windows Installer and Windows Resource Protection.For more information, see Using Windows Installer and Windows Resource Protection.
Commenti
Per una descrizione della relazione tra componenti e funzionalità, vedere Tabella delle funzionalità.
Il programma di installazione tiene traccia delle DLL condivise indipendentemente dal conteggio dei riferimenti dll condivise nel Registro di sistema. Se nel Registro di sistema esiste un conteggio dei riferimenti per una DLL condivisa, il programma di installazione incrementa sempre il conteggio durante l'installazione del file e lo decrementa quando viene disinstallato. Se msidbComponentAttributesSharedDllRefCount, non è impostato e il conteggio dei riferimenti non esiste già, il programma di installazione non ne creerà uno. Si noti che il conteggio dei riferimenti SharedDLLs nel Registro di sistema viene incrementato per tutti i file installati nella cartella System.
Se msidbComponentAttributesSharedDllRefCount non è impostato, un'altra applicazione può rimuovere il componente anche se è ancora necessario. Per verificare in che modo questo problema può verificarsi, considerare lo scenario seguente:
- Un'applicazione che usa il programma di installazione installa un componente condiviso.
- Il bit msidbComponentAttributesSharedDllRefCount non è impostato e non è presente alcun conteggio dei riferimenti. Pertanto, il programma di installazione non inizia un conteggio dei riferimenti.
- Un'applicazione legacy che condivide questo componente e non usa il programma di installazione è installata.
- L'applicazione legacy crea e incrementa un conteggio dei riferimenti per il componente condiviso.
- L'applicazione legacy viene disinstallata.
- Il conteggio dei riferimenti per il componente condiviso viene decrementato su zero e il componente viene rimosso.
- L'applicazione che usa il programma di installazione non ha più accesso al componente.
Per evitare questo comportamento, impostare msidbComponentAttributesSharedDllRefCount.
Si noti che i componenti dei servizi di sistema non devono essere specificati come run-from-source senza essere progettati specificamente per tale utilizzo. Per altri dettagli, vedere la tabella ServiceInstall .
Si noti che gli attributi che abilitano l'installazione di run-from-source non devono mai essere impostati per i componenti contenenti librerie a collegamento dinamico che si trovano nella cartella di sistema. Il motivo è che se lo stato di installazione del componente diventa impostato su run-from-source seguendo una funzionalità o impostando nell'interfaccia utente, le chiamate successive a LoadLibrary nella DLL non riusciranno.
Vedere anche Controllo degli stati di selezione delle funzionalità.