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


Установка сборок Win32 для параллельного общего доступа

Ниже описано, как создать пакет установщика Windows для установки сборки Win32. Пакет устанавливает параллельную сборку в папке Winsxs для совместного использования приложениями. После установки пакета общая сборка глобально доступна любому приложению, указывающего зависимость от сборки в файле манифеста сборки. Установщик не выполняет глобальную регистрацию параллельной сборки в системе.

Обратите внимание, что можно установить общие параллельные сборки с помощью модулей слияния .

Прежде чем продолжить, необходимо понять, как создать пакет установщика Windows без сборок. Пример создания простой установки см. в разделе Пример установки.

Установить общую сборку параллельно

  1. Определите компонент установщика Windows, включающий сборку Win32. Этот компонент может содержать другие ресурсы, которые всегда должны быть установлены или удалены с сборкой. Все остальные компоненты приложения можно создавать так же, как для установки без сборок. Добавьте строку в таблицу компонентов для компонента, содержащего сборку Win32. Введите действительный идентификатор GUID Windows Installer для этого кода компонента. Не используйте файл манифеста в качестве ключа для этого компонента.
  2. Добавьте строку в таблицу FeatureComponents, связывая компонент с функцией установщика Windows. Для получения информации см. в компонентах и возможностях. Компонент установщика Windows должен быть частью функциональности приложения, узнаваемой для пользователя. Сборка активируется при выборе этой функции пользователем или сбое приложения. Если сборка определяет дополнительную функцию, добавьте дополнительную строку в таблицу компонентов для атрибутов компонента. Этот шаг не нужен при создании модуля слияния.
  3. Для параллельных сборок сведения о привязке и активации, такие как классы COM, интерфейсы и библиотеки типов, хранятся в файлах манифестов, а не в реестре. Общие сборки хранят эти сведения в манифесте сборки. В системах, поддерживающих параллельные сборки, установщик пропускает обработку всех сведений о компоненте, введенном в таблице расширения , таблице действий , таблице TypeLib , таблице MIME , таблице класса , таблице ProgId и таблице AppId . Сведения о привязке и активации могут быть внесены в эти таблицы, чтобы их могли использовать системы, которые не поддерживают параллельное использование сборок.
  4. Если введена какая-либо информация о самостоятельной регистрации в таблице SelfReg, при параллельной установке установщик пропускает регистрацию сборки на глобальном уровне, а также не выполняет самостоятельную регистрацию компонента. Сведения о самостоятельной регистрации могут быть введены в таблицу SelfReg для самостоятельной регистрации компонента в системах, которые не поддерживают параллельное использование сборок.
  5. Добавьте любую другую информацию из реестра, за исключением привязки и активации или самостоятельной регистрации компонента, в таблицу реестра , таблицу RemoveRegistry и таблицу Environment .
  6. Поскольку это общая сборка, не создавайте файл .local. Не включайте сведения для этого компонента в таблицу IsolatedComponent. Установщик пропускает таблицу IsolatedComponent для этого компонента в операционных системах, поддерживающих параллельный общий доступ. Добавьте сведения в таблицу IsolatedComponent, если вы хотите, чтобы сборка была частной в системах, поддерживающих локальные файлы.
  7. Чтобы включить параллельный общий доступ, сборка Win32 должна быть установлена в папку Winsxs. Это достигается путем оставления столбца File_Application таблицы MsiAssembly пустым для сборки. Это сообщает установщику установить сборку в папку WinSxS, а не в папку компонента. Добавьте строку в таблицу msiAssembly для компонента, содержащего сборку Win32. Введите значение 1 в поле "Атрибуты" таблицы MsiAssembly, чтобы указать, что это сборка Win32. Для общей сборки оставьте поле File_Application пустым. Добавьте действие действия msiPublishAssemblies в таблицуInstallExecuteSequence или таблицу AdvtExecuteSequence. Добавьте действие MsiUnpublishAssemblies в таблицу InstallExecuteSequence.
  8. Добавьте строки в таблицу MsiAssemblyName для компонента. Добавьте одну строку для каждой пары имен и значений, указанной в разделе assemblyIdentity манифеста. Смотри пример в таблице MsiAssemblyName .