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

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

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

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

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

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