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
- 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. 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
- 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 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
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
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 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à.