Поделиться через


Таблица компонентов

В таблице Компонент перечислены компоненты, и она содержит следующие столбцы.

Столбец 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
Компонент не может быть запущен из источника. Задайте этот бит для всех компонентов, принадлежащих компоненту, чтобы предотвратить запуск компонента из сети или из источника. Обратите внимание, что если компонент не содержит компонентов, он всегда отображает запуск из источника и запуск с my-computer в качестве допустимых параметров.
msidbComponentAttributesSourceOnly
1
0x0001
Компонент можно запускать только из источника. Задайте этот бит для всех компонентов, принадлежащих компоненту, чтобы предотвратить запуск компонента с my-computer. Обратите внимание, что если компонент не содержит компонентов, он всегда отображает запуск из источника и запуск с my-computer в качестве допустимых параметров.
msidbComponentAttributesOptional
2
0x0002
Компонент может выполняться локально или из источника.
msidbComponentAttributesRegistryKeyPath
4
0x0004
Если этот бит задан, значение в столбце KeyPath используется в качестве ключа в таблице Registry. Если поле Value соответствующей записи в таблице Registry имеет значение NULL, поле Name в этой записи не должно содержать "+", "-" или "*". Дополнительные сведения см. в описании поля Имя в таблице Реестра.
Этот бит рекомендуется задавать для записей реестра, записываемых в куст HKCU. Это гарантирует, что установщик записывает необходимые записи реестра HKCU при наличии нескольких пользователей на одном компьютере.
msidbComponentAttributesSharedDllRefCount
8
0x0008
Если этот бит задан, установщик увеличивает число ссылок в общем реестре DLL файла ключей компонента. Если этот бит не задан, установщик увеличивает число ссылок только в том случае, если число ссылок уже существует.
msidbComponentAttributesPermanent
16
0x0010
Если этот бит задан, установщик не удаляет компонент во время удаления. Установщик регистрирует дополнительный системный клиент для компонента в параметрах реестра установщика Windows.
msidbComponentAttributesODBCDataSource
32
0x0020
Если этот бит задан, значение в столбце KeyPath является ключом в таблице ODBCDataSource.
msidbComponentAttributesTransitive
64
0x0040
Если этот бит задан, установщик повторно оценивает значение инструкции в столбце Условие при переустановке. Если значение ранее было False и изменилось на True, установщик устанавливает компонент. Если значение ранее было True и было изменено на False, установщик удаляет компонент, даже если компонент имеет другие продукты в качестве клиентов.
Этот бит следует задавать только для транзитивных компонентов. См . раздел Использование транзитивных компонентов.
msidbComponentAttributesNeverOverwrite
128
0x0080
Если этот бит задан, установщик не устанавливает и не переустанавливать компонент, если файл пути к ключу или запись реестра пути к ключу для компонента уже существует. Приложение регистрирует себя как клиент компонента.
Используйте этот флаг только для компонентов, которые регистрируются в таблице реестра. Не используйте этот флаг для компонентов, зарегистрированных в таблицахAppId, Class, Extension, ProgId, MIME и Verb.
msidbComponentAttributes64bit
256
0x0100
Задайте этот бит, чтобы пометить его как 64-разрядный компонент. Этот атрибут упрощает установку пакетов, которые включают как 32-разрядные, так и 64-разрядные компоненты. Если этот бит не задан, компонент регистрируется как 32-разрядный компонент.
Если это 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
Задайте этот бит для компонента в пакете исправлений, чтобы предотвратить оставление потерянных компонентов на компьютере. Если установлено последующее исправление, помеченное значением msidbPatchSequenceSupersedeEarlier в таблице MsiPatchSequence , заменяющее первое исправление, установщик Windows 4.5 и более поздних версий может отменить регистрацию и удалить компоненты, помеченные значением msidbComponentAttributesUninstallOnSupersedence . Если компонент не помечен этим битом, установка заменяющего исправления может оставить на компьютере неиспользуемый компонент.
Установка свойства MSIUNINSTALLSUPERSEDEDCOMPONENTS действует так же, как и установка этого бита для всех компонентов.
Установщик Windows 4.0 и более ранние версии: значение msidbComponentAttributesUninstallOnSupersedence не поддерживается и игнорируется.

msidbComponentAttributesShared
2048
0x0800
Если компонент помечен этим значением атрибута по крайней мере в одном пакете, установленном в системе, установщик обрабатывает компонент как помеченный во всех пакетах. Если удаляется пакет, который использует помеченный компонент, установщик Windows 4.5 может продолжать совместно использовать самую высокую версию компонента в системе, даже если эта самая высокая версия была установлена удаляемым пакетом.
Если для политики 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 завершатся ошибкой.

См. также раздел Управление состояниями выбора компонентов.

Проверка

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