Condividi tramite


Tabella dei componenti

La tabella Component elenca i componenti e include 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 stringa univoco per questo componente, versione e lingua.

Si noti che le lettere di questi GUID devono essere maiuscole. Le utilità, ad esempio GUIDGEN, possono generare GUID contenenti lettere minuscole. Le lettere minuscole devono essere modificate in lettere maiuscole 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 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 del profilo utente. Questi file non sarebbero disponibili per tutti gli utenti in situazioni multiutente e potrebbero causare la visualizzazione permanente del componente da parte del programma di installazione come richiesta di ripristino.

Chiave esterna alla colonna 1 della tabella Directory.

Attributi

Questa colonna contiene un flag di 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 .msi che viene scaricato da un percorso Web, i flag di attributo non devono essere impostati per consentire l'esecuzione di un componente dall'origine. Si tratta di una limitazione di Windows Installer e può restituire uno stato di funzionalità di INSTALLSTATE_BADCONFIG.

Flag di bit
msidbComponentAttributesLocalOnly
0
0x0000
Impossibile eseguire il componente dall'origine. Impostare questo bit per tutti i componenti appartenenti a una funzionalità per impedire che la funzionalità venga eseguita dalla rete o dall'origine. Si noti che se una funzionalità non include componenti, la funzionalità mostra sempre run-from-source ed run-from-my-computer come opzioni valide.
msidbComponentAttributesSourceOnly
1
0x0001
Il componente può essere eseguito solo dall'origine. Impostare questo bit per tutti i componenti appartenenti a una funzionalità per impedire che la funzionalità venga eseguita da my-computer. Si noti che se una funzionalità non include componenti, la funzionalità mostra sempre run-from-source ed run-from-my-computer come opzioni valide.
msidbComponentAttributesOptional
2
0x0002
Il componente può essere eseguito in locale o dall'origine.
msidbComponentAttributesRegistryKeyPath
4
0x0004
Se questo bit è impostato, il valore nella colonna KeyPath viene usato come chiave nella tabella del Registro di sistema. Se il campo Valore del record corrispondente nella tabella del Registro di sistema è Null, il campo Name in tale record non deve contenere "+", "-" o "*". Per altre informazioni, vedere la descrizione del campo Nome nella tabella Del Registro di sistema.
L'impostazione di questo bit è consigliata per le voci del Registro di sistema scritte nell'hive HKCU. In questo modo il programma di installazione scrive le voci del Registro di sistema HKCU necessarie quando sono presenti più utenti nello stesso computer.
msidbComponentAttributesSharedDllRefCount
8
0x0008
Se questo bit è impostato, il programma di installazione incrementa il conteggio dei riferimenti nel Registro di sistema DLL condiviso del file di chiave del componente. Se questo bit non è impostato, il programma di installazione incrementa il conteggio dei riferimenti solo se il conteggio dei riferimenti esiste già.
msidbComponentAttributesPermanent
16
0x0010
Se questo bit è impostato, il programma di installazione non rimuove il componente durante una disinstallazione. Il programma di installazione registra un client di sistema aggiuntivo per il componente nelle impostazioni del Registro di sistema di Windows Installer.
msidbComponentAttributesODBCDataSource
32
0x0020
Se questo bit è impostato, il valore nella colonna KeyPath è una chiave nella tabella ODBCDataSource.
msidbComponentAttributesTransitive
64
0x0040
Se questo bit è impostato, il programma di installazione rivaluta il valore dell'istruzione nella colonna Condizione dopo una reinstallazione. Se il valore era precedentemente False e è stato modificato in True, il programma di installazione installa il componente. Se il valore è stato precedentemente True ed è stato modificato in False, il programma di installazione rimuove il componente anche se il componente ha altri prodotti come client.
Questo bit deve essere impostato solo per i componenti transitivi. Vedere Uso di componenti transitivi.
msidbComponentAttributesNeverOverwrite
128
0x0080
Se questo bit è impostato, il programma di installazione non installa o reinstalla il componente se esiste già un file di percorso chiave o una voce del Registro di sistema del percorso chiave per il componente. L'applicazione si registra come client del componente.
Usare questo flag solo per i componenti registrati dalla tabella Registro di sistema. Non usare questo flag per i componenti registrati dalle tabelle AppId, Class, Extension, ProgId, MIME e Verb.
msidbComponentAttributes64bit
256
0x0100
Impostare questo bit per contrassegnarlo come componente a 64 bit. Questo attributo facilita l'installazione di pacchetti che includono sia componenti a 32 bit che a 64 bit. Se questo bit non è impostato, il componente viene registrato come componente a 32 bit.
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
Impostare questo bit per disabilitare Reflection del Registro di sistema su tutte le chiavi del Registro di sistema esistenti e nuove interessate da questo componente. Se questo bit è impostato, Windows Installer chiama RegDisableReflectionKey in ogni chiave a cui viene eseguito l'accesso dal componente. Questo bit è disponibile con Windows Installer versione 4.0. Questo bit viene ignorato nei sistemi a 32 bit. Questo bit viene ignorato nelle versioni a 64 bit di Windows XP.
Nota: le applicazioni Windows a 32 bit in esecuzione nell'emulatore 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 visualizzazioni del Registro di sistema.
msidbComponentAttributesUninstallOnSupersedence
1024
0x0400
Impostare questo bit per un componente in un pacchetto di patch per impedire l'uscita di componenti orfani nel computer. Se viene installata una patch successiva, contrassegnata con il valore msidbPatchSequenceSupersedeEarlier nella tabella MsiPatchSequence per sostituire la prima patch, Windows Installer 4.5 e versioni successive può annullare la registrazione e disinstallare i componenti contrassegnati con il valore msidbComponentAttributesUninstallOnSupersedence . Se il componente non è contrassegnato con questo bit, l'installazione di una patch di sostituzione può lasciare dietro un componente inutilizzato nel computer.
L'impostazione della proprietà MSIUNINSTALLSEDEDCOMPONENTS 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 un componente è contrassegnato con questo valore di attributo in almeno un pacchetto installato nel sistema, il programma di installazione considera il componente come contrassegnato in tutti i pacchetti. Se viene disinstallato un pacchetto che condivide il componente contrassegnato, Windows Installer 4.5 può continuare a condividere la versione più alta del componente nel sistema, anche se tale versione più elevata è stata installata dal pacchetto che viene disinstallato.
Se il criterio DisableSharedComponent è impostato su 1, nessun pacchetto ottiene la funzionalità del componente condivisa 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 che può controllare se è installato un componente. Se la condizione è Null o restituisce true, il componente è abilitato. Se la condizione restituisce False, il componente è 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 il controllo DoActionEvent per chiamare MsiSetComponentState.

Si noti che, a meno che non sia impostato il bit transitivo nella colonna Attributi per un componente, il componente rimane abilitato una volta installato anche se l'istruzione condizionale nella colonna Condition restituisce False in una successiva installazione di manutenzione del prodotto.

La colonna Condition 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 usato dal programma di installazione per rilevare il componente. Due componenti non possono condividere lo stesso valore del percorso chiave. Il valore di questa colonna è anche il percorso restituito dalla funzione MsiGetComponentPath .

Se il valore non è Null, KeyPath è una chiave primaria nella tabella Registro di sistema, ODBCDataSource o File a seconda del valore attributo. 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 Windows Installer 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 Installer non installa, aggiorna o rimuove il componente. Non è consigliabile 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 Uso di Windows Installer e Windows Resource Protection.

Commenti

Per una discussione sulla relazione tra componenti e funzionalità, vedere Tabella delle funzionalità.

Il programma di installazione tiene traccia delle DLL condivise indipendentemente dal numero di riferimenti dll condivise nel Registro di sistema. Se esiste un numero di riferimenti per una DLL condivisa nel Registro di sistema, il programma di installazione incrementa sempre il conteggio quando si installa il 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 numero di 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 vedere come potrebbe verificarsi questo scenario:

  • Un'applicazione che usa il programma di installazione installa un componente condiviso.
  • Il bit msidbComponentAttributesSharedDllRefCount non è impostato e non esiste alcun conteggio dei riferimenti. Pertanto, il programma di installazione non inizia un conteggio dei riferimenti.
  • Applicazione legacy che condivide questo componente e non usa il programma di installazione.
  • L'applicazione legacy crea e incrementa un numero di riferimenti per il componente condiviso.
  • L'applicazione legacy viene disinstallata.
  • Il numero di 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 in modo specifico per tale uso. Per altre informazioni, vedere la tabella ServiceInstall .

Si noti che gli attributi che abilitano l'installazione da origine non devono mai essere impostati per i componenti contenenti librerie di 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 riuscirebbero.

Vedere anche, Controllo degli stati di selezione delle funzionalità.

Convalida

ICE02
ICE03
ICE06
ICE07
ICE08
ICE09
ICE18
ICE19
ICE21
ICE30
ICE32
ICE35
ICE38
ICE41
ICE42
ICE43
ICE46
ICE50
ICE54
ICE57
ICE59
ICE62
ICE67
ICE76
ICE79
ICE80
ICE83
ICE86
ICE88
ICE91
ICE92
ICE97