Таблица компонентов
В таблице Компонент перечислены компоненты, и она содержит следующие столбцы.
Столбец | Type | Ключ | Допускает значения NULL |
---|---|---|---|
Компонент | Идентификатор | Да | N |
ComponentId | GUID | Нет | Да |
Каталог_ | Идентификатор | N | N |
Атрибуты | Целое число | N | Нет |
Условие | Condition | Нет | Да |
KeyPath | Идентификатор | N | Да |
Столбцы
-
Компонент
-
Идентифицирует запись компонента.
Ключ первичной таблицы.
-
ComponentId
-
Строковый GUID, уникальный для этого компонента, версии и языка.
Обратите внимание, что буквы этих GUID должны быть прописными. Такие служебные программы, как GUIDGEN, могут создавать идентификаторы GUID, содержащие строчные буквы. Строчные буквы должны быть изменены на прописные, чтобы сделать эти допустимые guid кода компонента.
Если этот столбец имеет значение NULL, установщик не регистрирует компонент и компонент не может быть удален или восстановлен установщиком. Это может быть сделано намеренно, если компонент требуется только во время установки, например настраиваемое действие, которое очищает временные файлы или удаляет старый продукт. Это также может быть полезно при копировании файлов данных на компьютер пользователя, который не требуется регистрировать.
-
Каталог_
-
Внешний ключ записи в таблице Directory. Это имя свойства, значение которого содержит фактический путь, который можно задать с помощью действия AppSearch или с помощью параметра по умолчанию, полученного из таблицы Каталог.
Разработчики не должны создавать компоненты, которые помещает файлы в одну из папок профиля пользователя. Эти файлы будут доступны не всем пользователям в многопользовательских ситуациях и могут привести к тому, что установщик окончательно считает, что компонент требует восстановления.
Внешний ключ к столбцу один из таблиц Каталога.
-
Атрибуты
-
Этот столбец содержит битовый флаг, указывающий параметры для удаленного выполнения. Добавьте указанный бит к общему значению в столбце, чтобы включить параметр .
Примечание
В случае .msi файла, который загружается из веб-расположения, флаги атрибутов не должны быть установлены, чтобы разрешить запуск компонента из источника. Это ограничение установщика Windows, которое может возвращать состояние компонента INSTALLSTATE_BADCONFIG.
Битовый флаг - msidbComponentAttributesLocalOnly
- 0
- 0x0000
- msidbComponentAttributesSourceOnly
- 1
- 0x0001
- msidbComponentAttributesOptional
- 2
- 0x0002
- msidbComponentAttributesRegistryKeyPath
- 4
- 0x0004
Этот бит рекомендуется задавать для записей реестра, записываемых в куст HKCU. Это гарантирует, что установщик записывает необходимые записи реестра HKCU при наличии нескольких пользователей на одном компьютере.- msidbComponentAttributesSharedDllRefCount
- 8
- 0x0008
- msidbComponentAttributesPermanent
- 16
- 0x0010
- msidbComponentAttributesODBCDataSource
- 32
- 0x0020
- msidbComponentAttributesTransitive
- 64
- 0x0040
Этот бит следует задавать только для транзитивных компонентов. См . раздел Использование транзитивных компонентов.- msidbComponentAttributesNeverOverwrite
- 128
- 0x0080
Используйте этот флаг только для компонентов, которые регистрируются в таблице реестра. Не используйте этот флаг для компонентов, зарегистрированных в таблицахAppId, Class, Extension, ProgId, MIME и Verb.- msidbComponentAttributes64bit
- 256
- 0x0100
Если это 64-разрядный компонент, заменяющий 32-разрядный компонент, задайте этот бит и назначьте новый GUID в столбце ComponentId.msidbComponentAttributesDisableRegistryReflection
512
0x0200
Установите этот бит, чтобы отключить отражение реестра для всех существующих и новых разделов реестра, затронутых этим компонентом. Если этот бит задан, установщик Windows вызывает RegDisableReflectionKey для каждого ключа, к которым обращается компонент. Этот бит доступен в установщике Windows версии 4.0. Этот бит игнорируется в 32-разрядных системах. Этот бит игнорируется в 64-разрядных версиях Windows XP.
Примечание. 32-разрядные приложения Windows, работающие в 64-разрядном эмуляторе Windows (WOW64), ссылаются на представление реестра, отличное от представления 64-разрядных приложений. Отражение реестра копирует некоторые значения реестра между этими двумя представлениями реестра.- msidbComponentAttributesUninstallOnSupersedence
- 1024
- 0x0400
Установка свойства MSIUNINSTALLSUPERSEDEDCOMPONENTS действует так же, как и установка этого бита для всех компонентов.
Установщик Windows 4.0 и более ранние версии: значение msidbComponentAttributesUninstallOnSupersedence не поддерживается и игнорируется.- msidbComponentAttributesShared
- 2048
- 0x0800
Если для политики DisableSharedComponent задано значение 1, никакие пакеты не получают функциональные возможности общего компонента, включенные этим битом.
Установщик Windows 4.0 и более ранние версии: значение msidbComponentAttributesShared не поддерживается и игнорируется. -
Состояние
-
Этот столбец содержит условный оператор, который может управлять установкой компонента. Если условие имеет значение NULL или имеет значение true, компонент включен. Если условие имеет значение False, компонент отключается и не устанавливается.
Поле Условие включает или отключает компонент только во время действия CostFinalize. Чтобы включить или отключить компонент после CostFinalize, необходимо использовать настраиваемое действие или DoAction ControlEvent для вызова MsiSetComponentState.
Обратите внимание, что если для компонента не задан бит Transitive в столбце Атрибуты, компонент остается включенным после установки, даже если условный оператор в столбце Условие позже при последующей установке продукта будет иметь значение False.
Столбец Условие в таблице Компонент принимает условные выражения, содержащие ссылки на установленные состояния компонентов и компонентов. Сведения о синтаксисе условных операторов см. в разделе Синтаксис условных операторов.
-
KeyPath
-
Это значение указывает на файл или папку, принадлежащие компоненту, который установщик использует для обнаружения компонента. Два компонента не могут совместно использовать одно и то же значение пути к ключу. Значение в этом столбце также является путем, возвращаемым функцией MsiGetComponentPath .
Если значение не равно NULL, keyPath является первичным ключом в таблицахRegistry, ODBCDataSource или File в зависимости от значения атрибута. Если keyPath имеет значение NULL, то в качестве пути к ключу используется папка столбца Directory_.
Так как папки, созданные установщиком, удаляются, когда они становятся пустыми, необходимо создать запись в таблице CreateFolder , чтобы установить компонент, состоящий из пустой папки.
Обратите внимание, что если компонент установщика Windows содержит файл или раздел реестра, защищенный защитой ресурсов Windows (WRP), или файл, защищенный защитой файлов Windows (WFP), этот ресурс должен использоваться в качестве keyPath для компонента. В этом случае установщик Windows не устанавливает, не обновляет и не удаляет компонент. Не следует включать в пакет установки какие-либо защищенные ресурсы. Вместо этого следует использовать поддерживаемые механизмы замены ресурсов для Защиты ресурсов Windows. Дополнительные сведения см. в разделах Использование установщика Windows и Защиты ресурсов Windows.
Комментарии
Сведения о связи между компонентами и компонентами см. в разделе Таблица признаков.
Установщик отслеживает общие библиотеки DLL независимо от количества ссылок на общие библиотеки DLL в реестре. Если количество ссылок для общей библиотеки DLL существует в реестре, установщик всегда увеличивает его при установке файла и уменьшает его при удалении. Если msidbComponentAttributesSharedDllRefCount не задано, а число ссылок еще не существует, установщик не создаст его. Обратите внимание, что количество ссылок SharedDLLs в реестре увеличивается для всех файлов, установленных в папку System.
Если msidbComponentAttributesSharedDllRefCount не задан, то другое приложение может удалить компонент, даже если он по-прежнему необходим. Чтобы узнать, как это может произойти, рассмотрим следующий сценарий:
- Приложение, использующее установщик, устанавливает общий компонент.
- Бит msidbComponentAttributesSharedDllRefCount не задан, и количество ссылок отсутствует. Таким образом, установщик не начинает подсчет ссылок.
- Устанавливается устаревшее приложение, которое использует этот компонент и не использует установщик.
- Устаревшее приложение создает и увеличивает число ссылок для общего компонента.
- Устаревшее приложение удаляется.
- Количество ссылок для общего компонента уменьшается до нуля, и компонент удаляется.
- Приложение, использующее установщик, больше не имеет доступа к компоненту.
Чтобы избежать этого, задайте msidbComponentAttributesSharedDllRefCount.
Обратите внимание, что компоненты системных служб не следует указывать как запускаемые из источника без специального использования. Дополнительные сведения см. в таблице ServiceInstall .
Обратите внимание, что атрибуты, обеспечивающие установку из исходного кода, никогда не должны задаваться для компонентов, содержащих библиотеки динамической компоновки, которые попадают в системную папку. Причина заключается в том, что если состояние установки компонента становится запущенным из источника, следуя за компонентом или заданным в пользовательском интерфейсе, последующие вызовы LoadLibrary в библиотеке DLL завершатся ошибкой.
См. также раздел Управление состояниями выбора компонентов.