Создание одного пакета

Пакет двойного назначения — это пакет установщика Windows 5.0, который был подготовлен для установки приложения в контексте установки для каждого пользователя или компьютера. Разработчики программы установки, использующие пакет двойного назначения для своего приложения, могут предоставлять пользователям возможность выбора контекста установки во время установки и удалять запросы учетных данных контроля учетных данных для отдельных пользователей в Windows 7 или Windows Server 2008 R2. Разработка пакета установщика Windows 5.0 двойного назначения для установки в Windows 7 и Windows Server 2008 R2 называется разработкой одного пакета.

Вы можете начать разработку пакетов двойного назначения для Windows 7 и Windows Server 2008 R2 с помощью установщика Windows 5.0, свойства MSIINSTALLPERUSER , свойства ALLUSERS и известных папок и регистраций оболочки Windows с поддержкой каждого пользователя. Когда установщик Windows 5.0 устанавливает пакет двойного назначения в контексте для каждого пользователя в Windows 7 или Windows Server 2008 R2, установщик направляет файлы и записи реестра в расположения для каждого пользователя и не отображает запросы UAC на ввод учетных данных. Когда установщик Windows 5.0 устанавливает пакет двойного назначения в контексте для каждого компьютера, установщик направляет файлы и записи реестра в расположения для каждого компьютера и запрашивает учетные данные UAC, чтобы убедиться, что у пользователя есть достаточные привилегии для установки программного обеспечения для всех пользователей компьютера. После установки приложения установщик Windows 5.0 использует тот же контекст установки для всех последующих обновлений, исправлений или удаления приложения.

Установщик Windows 4.5 или более ранней версии: свойство MSIINSTALLPERUSER и пользовательские версии папок, на которые ссылаются свойства ProgramFilesFolder, CommonFilesFolder, ProgramFiles64Folder и CommonFiles64Folder , не поддерживаются. Папки FOLDERID_UserProgramFiles и FOLDERID_UserProgramFilesCommon доступны начиная с Windows 7 и Windows Server 2008 R2. Это означает, что установки, разработанные для установщика Windows 4.5 или более ранней версии, направляют файлы и записи реестра в FOLDERID_ProgramFiles, FOLDERID_ProgramFilesCommon, FOLDERID_ProgramFilesX64 и FOLDERID_ProgramFilesCommonX64. Так как это расположения, доступные для других пользователей компьютера, системам Windows Vista и более поздних версий требуется отображение запросов UAC на ввод учетных данных.

Когда пользователь устанавливает пакет двойного назначения, созданный для установщика Windows 5.0 с установщиком Windows 4.5 или более ранней версии, установщик игнорирует свойство MSIINSTALLPERUSER . В этом случае установка может направлять файлы и записи реестра в расположения, доступные другим пользователям, и требовать, чтобы система отображала запросы UAC для учетных данных. Установщик Windows 5.0 может установить пакет, разработанный для установщика Windows 4.5 или более ранней версии, однако при установке файлы и записи реестра направляются в расположения, доступные для других пользователей, и система должна отображать запросы контроля учетных данных.

Рекомендации по разработке

Придерживайтесь следующих рекомендаций по созданию одного пакета, чтобы обеспечить возможность установки пакета в контексте для каждого пользователя или компьютера. Следуйте этим рекомендациям, чтобы позволить пользователю выбрать во время установки установку для каждого пользователя или компьютера, а также удалить запросы UAC из установок для каждого пользователя.

  • Для установки на пользователя требуется установщик Windows 5.0 в Windows 7 или Windows Server 2008 R2. Следует сообщить пользователю, что пакет поддерживает установку приложения на каждом компьютере в более ранних версиях системы.

  • Инициализируйте значения свойств ALLUSERS и MSIINSTALLPERUSER в таблице свойств пакета двойного назначения. Используйте значение ALLUSERS 2 и значение MSIINSTALLPERUSER 1 в качестве исходных значений. Это указывает установку на пользователя в качестве установки по умолчанию для пакета двойного назначения.

  • Рассмотрите возможность создания диалогового окна для пользовательского интерфейса пакета двойного назначения, которое позволяет пользователю выбирать контекст во время установки. Создай элементы управления в этом настраиваемом диалоговом окне, чтобы задать значения свойств ALLUSERS и MSIINSTALLPERUSER . Для значения ALLUSERS 2 задайте для MSIINSTALLPERUSER значение 1, чтобы указать установку для каждого пользователя, и задайте для MSIINSTALLPERUSER пустую строку (""), чтобы указать установку на компьютере. Пользователи также могут задать ALLUSERS и MSIINSTALLPERUSER в командной строке, если они устанавливают пакет из командной строки.

  • Проверьте пакет с помощью средств оценки внутренней согласованности — ICEs. Пакет должен пройти проверку ICE105 , чтобы быть допустимым пакетом двойного назначения.

  • Используйте таблицу реестра и таблицу RemoveRegistry для перенаправления записей реестра в отдельные части реестра во время установки для каждого пользователя. При установке на пользователя записи реестра с значением -1 в корневом столбце перенаправляются в HKEY_CURRENT_USER, а в установке на компьютер они направляются в HKEY_LOCAL_MACHINE. При установке на пользователя записи реестра, имеющие msidbRegistryRootClassesRoot (0) в корневом столбце, перенаправляются вклассыпрограммного обеспечения\HKCU\, а при установке на компьютере они направляются вклассыпрограммного обеспечения\HKLM\.

  • Используйте свойство ProgramFilesFolder в таблице Каталог32-разрядных пакетов установщика Windows , чтобы указать расположение каталогов, содержащих 32-разрядные компоненты, которые не являются общими для приложений. Когда пользователь устанавливает пакет двойного назначения с помощью контекста для каждого компьютера, эти компоненты сохраняются в папке Program Files в 32-разрядных версиях Windows и в папке Program Files (x86) в 64-разрядных версиях системы. Все пользователи могут получить доступ к компонентам в этих каталогах. Когда пользователь устанавливает пакет двойного назначения в Windows 7 или Windows Server 2008 R2 с помощью контекста для каждого пользователя, эти компоненты сохраняются в папке Программы текущего пользователя (например, %LocalAppData%\Programs) и могут быть доступны только для этого пользователя.

  • Используйте свойство CommonFilesFolder в таблице Каталог32-разрядных пакетов установщика Windows , чтобы указать расположение каталогов, содержащих 32-разрядные компоненты, совместно используемые приложениями. Когда пользователь устанавливает пакет двойного назначения с помощью контекста для каждого компьютера, эти компоненты сохраняются в папке Common Files и могут быть доступны всем пользователям. Когда пользователь устанавливает пакет двойного назначения в Windows 7 или Windows Server 2008 R2 с помощью контекста для каждого пользователя, эти компоненты сохраняются в папке Common текущего пользователя (например, %LocalAppData%\Programs\Common) и могут быть доступны только такому пользователю.

  • Используйте свойство ProgramFiles64Folder в таблице Каталог64-разрядных пакетов установщика Windows , чтобы указать расположение каталогов, содержащих 64-разрядные компоненты, которые не являются общими для приложений. Когда пользователь устанавливает пакет двойного назначения с помощью контекста для каждого компьютера, эти компоненты сохраняются в папке Program Files. Все пользователи могут получить доступ к компонентам в этих каталогах. Когда пользователь устанавливает пакет двойного назначения в Windows 7 или Windows Server 2008 R2 с помощью контекста для каждого пользователя, эти компоненты сохраняются в папке Программы текущего пользователя (например, %LocalAppData%\Programs) и могут быть доступны только для этого пользователя. Дополнительные сведения о создании пакета для установки приложения в 64-разрядных операционных системах см. в статье Установщик Windows в 64-разрядных операционных системах.

  • Используйте свойство CommonFiles64Folder в таблице Каталог64-разрядных пакетов установщика Windows , чтобы указать расположение каталогов, содержащих 64-разрядные компоненты, совместно используемые приложениями. Когда пользователь устанавливает пакет двойного назначения с помощью контекста для каждого компьютера, эти компоненты сохраняются в папке Common Files и могут быть доступны всем пользователям. Когда пользователь устанавливает пакет двойного назначения в Windows 7 или Windows Server 2008 R2 с помощью контекста для каждого пользователя, эти компоненты сохраняются в папке Common текущего пользователя (например, %LocalAppData%\Programs\Common) и могут быть доступны только такому пользователю.

  • Используйте свойства ProgramFilesFolder и CommonFilesFolder в таблице Каталог64-разрядных пакетов установщика Windows , чтобы указать расположение каталогов, содержащих 32-разрядные компоненты. Используйте разные имена для 32-разрядных и 64-разрядных версий всех компонентов, предоставленных с одинаковым именем, или сохраните версии в разных папках. Например, добавьте сведения в таблицу Каталог, чтобы указать расположение каталога, содержащего 32-разрядную версию, как [ProgramFilesFolder]\ISV Name\Application Name\x86, и расположение каталога, содержащего 64-разрядную версию, как [Program64FilesFolder]\ISV Name\Application Name\x64. Затем установка на компьютере сохраняет 32-разрядную версию в папке Program Files(x86)\ISV Name\Application Name\x86 и сохраняет 64-разрядную версию в папке Program Files\ISV Name\Application Name\x64. Установка на пользователя сохраняет 32-разрядную версию в папке %LocalAppData%\Programs\ISV Name\Application Name\x86 и устанавливает 64-разрядную версию в папку %LocalAppData%\Programs\ISV Name\Application Name\x64.

  • Храните данные конфигурации для каждого пользователя для приложения в папке \Users\username\AppData.

  • Храните шаблоны и файлы, созданные приложением, во вложенных папках в разделе \Users\username.

  • Если в приложении используются расширения оболочки, следует использовать точки расширения оболочки с поддержкой каждого пользователя, доступные начиная с Windows 7 или Windows Server 2008 R2.

  • Не используйте в пакете настраиваемые действия, требующие повышенных привилегий для выполнения. Таблица CustomAction не должна содержать пользовательских действий, помеченных для выполнения с повышенными привилегиями. Дополнительные сведения о настраиваемых действиях с повышенными привилегиями см. в разделе Безопасность пользовательских действий.

  • Не записывайте данные в глобальные системные папки. Таблица Каталог не должна содержать ссылки на следующие свойства системных папок.

AdminToolsFolder
CommonAppDataFolder
FontsFolder
System16Folder
System64Folder
SystemFolder
TempFolder
WindowsFolder
WindowsVolume

  • Не устанавливайте сборку среды CLR в глобальный кэш сборок (GAC). Дополнительные сведения об установке сборок в глобальный кэш сборок см. в разделах Добавление сборок в пакет и Установка сборок СРЕДЫ CLR.
  • Не устанавливайте источники данных ODBC. Не используйте таблицу ODBCDataSource для установки источника данных.
  • Не устанавливайте службы. Не используйте таблицу ServiceInstall для установки службы.

Пример

Пример пакета двойного назначения приведен в разделе Компоненты Windows SDK для разработчиков установщика Windows в виде файла PUASample1.msi. Если у вас есть текущий пакет SDK, у вас есть доступ ко всем средствам и данным, необходимым для воспроизведения примера пакета установки. Дополнительные сведения об этом примере см. в разделе Пример разработки отдельных пакетов.