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


Пример разработки одного пакета

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

Получение копии примера

Копия этого примера и редактор таблицы базы данных установщика Windows, Orca.exe, находятся в компонентах пакета SDK для Windows для разработчиков установщика Windows. Пример и редактор таблиц предоставляются в комплекте средств разработки программного обеспечения Windows для Windows Server 2008 R2 и Windows 7 в качестве файлов установки установщика Windows PUASample1.msi и Orca.msi.

Требования к системе

Редактор базы данных Orca.exe требует Windows Server 2008 R2 и более ранних версий и Windows 7 и более ранних версий. Пакет двойного назначения PUASample1.msi можно установить в контексте установки на компьютер или на пользователя в Windows Server 2008 R2 и Windows 7. PUASample1.msi можно установить только в контексте на компьютере в Windows Server 2008 и более ранних версиях и Windows Vista и более ранних версиях. Редактор базы данных можно установить для проверки содержимого PUASample1.msi без установки примера. Чтобы установить пример или пакеты редактора, убедитесь, что политика DisableMSI не задана для значения, которое блокирует установку приложений.

Определение пакета двойного назначения

Пакеты двойного назначения должны инициализировать значение свойства MSIINSTALLPERUSERER ДО 1. Это определяет пакет как способный устанавливаться в контексте для каждого компьютера или пользователя в Windows Server 2008 R2 и Windows 7. Задайте свойство MSIINSTALLPERUSER в пакете только в том случае, если оно было написано в соответствии с рекомендациями по разработке отдельных пакетов, и если вы планируете предоставить пользователям возможность установить пакет в контексте каждого пользователя или на компьютер. Пакет двойного назначения также должен инициализировать значение свойства ALLUSERS до 2. Это указывает на пользователя в качестве контекста установки по умолчанию для приложения. Если значение свойства ALLUSERS имеет значение, отличное от 2, установщик Windows игнорирует свойство MSIINSTALLPERUSERERER.

Используйте редактор базы данных установщика Windows, например Orca.exe, для изучения содержимого PUASample1.msi. Таблица свойств в примере пакета содержит следующие две записи.

Таблица свойств (частично)

Свойство Значение
ALLUSERS 2
MSIINSTALLPERUSERER 1

 

Настраиваемое диалоговое окно для контекста установки

Пользовательский интерфейс примера пакета содержит пример настраиваемого диалогового окна VerifyReadyDialog, который позволяет пользователям выбирать контекст установки для каждого пользователя или на компьютер во время установки. Таблица диалогового окна содержит запись, описывающую диалоговое окно VerifyReadyDialog. Значение, введенное в поле "Атрибуты", равно 39, так как в этом диалоговом окне используется msidbDialogAttributesVisible (1), msidbDialogAttributesModal (2), msidbDialogAttributesMinimize (4) и msidbDialogAttributesTrackDiskSpace (32). В строке заголовка диалогового окна отображается название, заданное значением свойства ProductName .

Таблица диалоговых окон (частичное)

Диалоговое окно HCentering VCentering Ширина Высота Атрибуты Заголовок Control_First Control_Default Control_Cancel
ПроверкаReadyDialog 50 50 480 280 39 [ProductName] InstallPerUser Следующий Отменить

 

Таблица control содержит записи для элементов управления , отображаемых в диалоговом окне VerifyReadyDialog. В диалоговом окне отображаются элементы управления PushButton и элемент управления Text . Все элементы управления используют атрибуты элемента управления msidbControlAttributesEnabled (2) и msidbControlAttributesVisible (1). Элемент управления InstallPerMachine также использует атрибут элемента управления ElevationShield, msidbControlAttributesElevationShield (8388608.) Этот атрибут элемента управления добавляет в элемент управления InstallPerMachine значок повышения прав пользователей (UAC) и сообщает пользователю, что учетные данные UAC необходимы для установки приложения в контексте каждого компьютера. Значение в текстовом поле таблицы Control — это текстовый стиль и текст, отображаемый элементом управления. Дополнительные сведения о добавлении текста в элемент управления с помощью предопределенных стилей см. в описании поля "Текст" в разделе "Элемент управления".

Таблица управления (частично)

Диалог_ Элемент управления Тип Атрибут Text Control_Next
ПроверкаReadyDialog Отменить Кнопка 3 {\Tahoma10}&Cancel Следующий
ПроверкаReadyDialog Предыдущий Кнопка 3 {\Tahoma10}<<&Назад Отменить
ПроверкаReadyDialog Следующий Кнопка 3 {\Tahoma10}&next >> InstallPerUser
ПроверкаReadyDialog Text2 Text 3 Готовы ли вы завершить приостановленную установку?
ПроверкаReadyDialog InstallPerUser Кнопка 3 {\Tahoma10} Установка только для &me InstallPerMachine
ПроверкаReadyDialog InstallPerMachine Кнопка 8388611 {\Tahoma10} Установка для &все Предыдущий
ПроверкаReadyDialog Отменить Кнопка 3 {\Tahoma10}&Cancel Следующий

 

Таблица ControlEvent указывает controlEvents или действия, установщик выполняется при взаимодействии пользователя с элементом управления. Когда пользователь активирует push-кнопку InstallPerUser, пользовательский интерфейс отображает диалоговое окно OutOfDisk, если свойство OutOfDiskSpace равно 1, задает значение свойства MSIINSTALLPERUSERERER значение 1, задает значение свойства ALLUSERS равным 2, задает для свойства MSIFASTINSTALL значение 1 и возвращает . Так как свойство MSIFASTINSTALL задано, точка восстановления системы не создается для установки. Когда пользователь активирует pushbutton InstallPerMachine, пользовательский интерфейс отображает диалоговое окно OutOfDisk, если свойство OutOfDiskSpace равно 1, задает значение свойства ALLUSERS значение 1 и возвращает значение.

Таблица ControlEvent (частично)

Диалог_ Управления_ Мероприятие Аргумент Condition Порядок
ПроверкаReadyDialog InstallPerUser SpawnDialog OutOfDisk OutOfDiskSpace = 1 1
ПроверкаReadyDialog InstallPerUser EndDialog Возврат OutOfDiskSpace <> 1 5
ПроверкаReadyDialog InstallPerUser [MSIINSTALLPERUSER] 1 1 2
ПроверкаReadyDialog InstallPerUser [ALLUSERS] 2 1 3
ПроверкаReadyDialog InstallPerMachine SpawnDialog OutOfDisk OutOfDiskSpace = 1 1
ПроверкаReadyDialog InstallPerMachine EndDialog Возврат OutOfDiskSpace <> 1 3
ПроверкаReadyDialog InstallPerMachine [ALLUSERS] 1 1 2
ПроверкаReadyDialog InstallPerUser [MSIFASTINSTALL] 1 1 4

 

Элемент управления InstallPerUser должен быть удален из пользовательского интерфейса любой установки с помощью версии установщика Windows до установщика Windows установщика Windows 5.0. Таблица ControlCondition в примере пакета содержит четыре записи, которые отключают и скрывают элемент управления InstallPerUser, если текущая версия меньше установщика Windows 5.0. В таблице используется значение свойства VersionMsi и синтаксис условной инструкции для определения этого условия. Действие, указанное в поле Action, выполняется только в том случае, если оператор в поле "Условие" имеет значение true.

Таблица ControlCondition (частично)

Диалог_ Управления_ Действие Condition
ПроверкаReadyDialog InstallPerUser Enable VersionMsi >= "5.00"
ПроверкаReadyDialog InstallPerUser Disable VersionMsi < "5.00"
ПроверкаReadyDialog InstallPerUser Показать VersionMsi >= "5.00"
ПроверкаReadyDialog InstallPerUser Скрыть VersionMsi < "5.00"

 

Указание структуры каталогов

Используйте редактор базы данных для проверки таблицы каталогов PUASample1.msi. Запись таблицы каталогов с пустой строкой в поле Directory_Parent представляет корневой каталог деревьев исходного и целевого каталогов. Если свойство TARGETDIR не определено, установщик задает значение во время установки значение свойства ROOTDRIVE. Если свойство SourceDir не определено, установщик устанавливает его значение в расположение каталога, содержащего пакет установщика Windows (MSI-файл).) Имена каталогов указываются с помощью короткого|длинного формата.

Таблица каталогов (частичная)

Directory Directory_Parent DefaultDir
TARGETDIR SourceDir
ProgramFilesFolder TARGETDIR .
ProgramMenuFolder TARGETDIR .
INSTALLLOCATION MyVendor Пример1|MSDN-PUASample1
MyVendor ProgramFilesFolder Msft|Microsoft

 

В источнике эта таблица каталогов разрешает следующие пути к каталогу.

\[SourceDir\]\\Msft\\Sample1 \[SourceDir\]

В целевой папке таблица каталогов разрешает пути в следующей таблице. Установщик задает значения свойств ProgramFilesFolder и ProgramMenuFolder в расположения, которые зависят от контекста установки и являются ли система 32-разрядными или 64-разрядными версиями Windows Server 2008 R2 и Windows 7. Пути к целевым папкам зависят от того, выбирает ли пользователь установку на отдельный пользователь или на компьютер.

Контекст установки Системные Примеры путей
На компьютер Windows Server 2008 R2 и Windows 7
32-разрядная версия
%ProgramFiles%\Msft\Sample1
%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Program
На компьютер Windows Server 2008 R2 и Windows 7
64-разрядная версия
%ProgramFiles(x86)%\Msft\Sample1
%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Program
Для каждого пользователя Windows Server 2008 R2 и Windows 7
32-разрядная или 64-разрядная версия
%USERPROFILE%\AppData\Local\Program\Msft\Sample1
%APPDATA%\Microsoft\Windows\Пуск меню\Программы

 

Приложения для каждого пользователя должны храниться в вложенных папках в папке "Программы", указанной значением свойства ProgramFilesFolder . Как правило, путь к приложению принимает следующую форму.

%LOCALAPPDATA%\Program\ISV name\AppName.

Данные конфигурации для каждого пользователя должны храниться в папке "Программы", указанной значением свойства ProgramMenuFolder . Как правило, эта папка расположена по следующему пути.

%APPDATA%\Microsoft\Windows\Пуск меню\Программы

При установке 32-разрядных компонентов пакета установщика Windows используйте свойство ProgramFilesFolder и CommonFilesFolder в таблице каталогов. При установке 64-разрядных компонентов пакета установщика Windows используйте свойства ProgramFiles64Folder и CommonFiles64Folder. Если приложение содержит 32-разрядные и 64-разрядные версии одного компонента с одинаковым именем, убедитесь, что эти версии сохраняются в разных каталогах или присваивают им разные имена.

В следующей таблице каталогов представлен пример макета каталога, совместимого с пакетом, который включает 32-разрядные и 64-разрядные компоненты и включает некоторые компоненты, которые совместно используются в приложениях.

Directory Directory_Parent DefaultDir
TARGETDIR SourceDir
ProgramFilesFolder TARGETDIR .:P rog32
ProgramFiles64Folder TARGETDIR .:P rog64
CommonFilesFolder TARGETDIR .:Share32
CommonFiles64Folder TARGETDIR .:Share64
ProgramMenuFolder TARGETDIR .:Sample1|MSDN-PUASample1
INSTALLLOCATION MyVendor Пример1|MSDN-PUASample1
INSTALLLOCATIONX64 Поставщикx64 Пример1|MSDN-PUASample1
SHAREDLOCATION ShVendor Пример1|MSDN-PUASample1
SHAREDLOCATIONX64 ShVendorx64 Пример1|MSDN-PUASample1
MyVendor ProgramFilesFolder Msft|Microsoft
Поставщикx64 ProgramFiles64Folder Msft|Microsoft
ShVendor CommonFilesFolder Msft|Microsoft
ShVendorx64 CommonFiles64Folder Msft|Microsoft
Shrx86 SHAREDLOCATION Компоненты x32|32-разрядные
Shrx64 SHAREDLOCATIONX64 Компоненты x64|64-разрядные
Binx86 INSTALLLOCATION Компоненты x32|32-разрядные
Binx64 INSTALLLOCATIONX64 Компоненты x64|64-разрядные
App32 Binx86 myapp|unshared 32-разрядные компоненты
App64 Binx64 myapp|unshared 64-разрядные компоненты
Share32 Shrx86 общие|общие 32-разрядные компоненты
Share64 Shrx64 общие|общие 64-разрядные компоненты

 

В источнике эта таблица каталогов разрешает следующие пути к каталогу.

\[SourceDir\]Prog32\\Msft\\Sample1\\x32\\myapp \[SourceDir\]Share32\\Common Files\\Msft\\Sample1\\x32\\shared \[SourceDir\]Prog64\\Msft\\Sample1\\x64\\myapp \[SourceDir\]Share64\\Common Files\\Msft\\Sample1\\x64\\shared \[SourceDir\]Sample1

В целевой папке эта таблица каталогов разрешает следующие пути к каталогу. Целевые пути зависят от контекста установки и системы.

Контекст установки Системные Примеры путей
На компьютер Windows Server 2008 R2 и Windows 7
32-разрядная версия
%ProgramFiles%\Msft\Sample1\x32\myapp
%ProgramFiles%\Common Files\Msft\Sample1\x32\shared
%ProgramFiles(x86)%\Msft\Sample1\x64\myapp
%ProgramFiles(x86)%\Common Files\Msft\Sample1\x64\shared
%ProgramData%\Microsoft\Windows\Start Menu\Program\Sample1
На компьютер Windows Server 2008 R2 и Windows 7
64-разрядная версия
%ProgramFiles(x86)%\Msft\Sample1\x32\myapp
%ProgramFiles(x86)%\Common Files\Msft\Sample1\x32\shared
%ProgramFiles%\Msft\Sample1\x64\myapp
%ProgramFiles%\Common Files\Msft\Sample1\x64\shared
%ProgramData%\Microsoft\Windows\Start Menu\Program\Sample1
Для каждого пользователя Windows Server 2008 R2 и Windows 7
32-разрядная или 64-разрядная версия
%LOCALAPPDATA%\Program\Msft\Sample1\x32\myapp
%LOCALAPPDATA%\Program\Common\Msft\Sample1\x32\shared
%LOCALAPPDATA%\Program\Msft\Sample1\x64\myapp
%LOCALAPPDATA%\Program\Common\Msft\Sample1\x64\shared
%APPDATA%\Microsoft\Windows\Start Menu\Program\Sample1

 

Регистрация приложения

PuASample.msi добавляет подраздел в раздел реестра путей приложений для приложения и выполняет регистрации, которые позволяют сохранять сведения о приложении в реестре под этим разделом. Дополнительные сведения о путях приложений и регистрации приложений см. в разделе "Путь к приложениям" и "Регистрация приложений" в разделе "Расширяемость оболочки" руководства разработчика оболочки. Во время установки пользователь принимает решение установить приложение в контексте установки каждого пользователя или на компьютер. Во время разработки пакета двойного назначения разработчик пакета не может знать, следует ли выполнять регистрацию в HKEY_LOCAL_MACHINE или HKEY_CURRENT_USER ключах.

Разработчик пакета определяет идентификатор файла исполняемого файла приложения в поле "Файл" таблицы файлов .

Таблица файлов (частичная)

Файл Компонент_ FileName FileSize Версия Язык Атрибуты Sequence
MyAppFile ProductComponent PUASAMP1.EXE|PUASample1.exe 81920 0 1

 

Значения, сохраненные в реестре, можно указать в поле "Значение" таблицы реестра в виде строки форматирования . Используйте идентификатор файла, определенный в поле "Файл" таблицы "Файл " и соглашение [#filekey] типа Formatted, чтобы указать значение по умолчанию для раздела реестра путей приложений. Действие INSTALL верхнего уровня выполняет действия в таблице InstallExecuteSequence. После завершения действий CostInitialize FileCost и InstallFinalize в этой таблице установщик Windows заменяет отформатированную подстроку [#MyAppFile] в таблице реестра полным путем к файлу приложения.

В примере определяется настраиваемое свойство RegRoot, которое содержит расположение корневого ключа и использует настраиваемое действие для сброса значения свойства, если пользователь выбирает установку на компьютер. Используйте настраиваемое свойство RegRoot в любых отформатированных строковых значениях, ссылающихся на корневое расположение. В таблице свойств пакет PUASample.msi определяет настраиваемое свойство и задает значение RegRoot для HKCU. Это инициализирует значение свойства для контекста установки для каждого пользователя, рекомендуемого контекста по умолчанию для пакетов двойного назначения.

Таблица свойств (частично)

Свойство Значение
RegRoot HKCU

 

В таблице CustomAction пакет определяет настраиваемое действие с именем Set_RegRoot_HKLM. Значение в поле Type определяет это как стандартное пользовательское действие типа 51 . Значение полей Source и Target в таблице CustomAction зависит от типа пользовательского действия. Дополнительные сведения о стандартных типах пользовательских действий см. в разделе "Типы настраиваемых действий". Поле Source для пользовательского действия Set_RegRoot_HKLM указывает, что значение свойства RegRoot. Если установщик выполняет Set_RegRoot_HKLM пользовательское действие, это сбрасывает значение свойства RegRoot в HKLM.

Таблица CustomAction (частично)

Действие Тип Оригинал Target
Set_RegRoot_HKLM 51 [RegRoot] HKLM

 

Действие INSTALL верхнего уровня выполняет действия в таблице InstallExecuteSequence в последовательности, указанной в поле последовательности этой таблицы. Значение, созданное в поле "Последовательность" для пользовательского действия Set_RegRoot_HKLM (1501), указывает, что это настраиваемое действие выполняется после действия InstallInitialize (1500) и перед действием ProcessComponents (1600.) Эта последовательность гарантирует, что запись для Set_RegRoot_HKLM настраиваемого действия вычисляется во время установки. Дополнительные сведения о рекомендуемой последовательности действий в таблице InstallExecuteSequence см. в разделе " Рекомендуемая установкаExecuteSequence ". Синтаксис условной инструкции, созданный в поле "Условие", указывает, что действие Set_RegRoot_HKLM выполняется только в том случае, если значение свойства ALLUSERS равно 1 во время установки. Значение свойства ALLUSERS со значением 1 указывает установку на компьютер.

Таблица InstallExecuteSequence (частично)

Действие Condition Sequence
Set_RegRoot_HKLM ALLUSERS=1 1501

 

Следующие записи в таблице реестра выполняют регистрацию, если установлен компонент ProductComponent. Значение -1 в корневом поле требуется для регистрации в HKEY_LOCAL_MACHINE для установки на пользователя и в HKEY_CURRENT_USER для установки каждого пользователя. Запись с пустой строкой в поле реестра добавляет вложенный ключ для приложения в разделе реестра AppPaths и задает для значения "(Default)" полный путь исполняемого файла приложения. Регистрация MyAppPathAlias сопоставляет исполняемый файл с псевдонимом приложения и позволяет запускать приложение, если пользователь вводит псевдоним puapct в командной строке. Регистрация MyAppPathRegistration сопоставляет имя исполняемого файла с полным путем к файлу.

Реестр Корневой Ключ. Имя. Значение Компонент
-1 Software\Microsoft\MyAppPathRegistrationLocation [RegRoot]\Software\Microsoft\Windows\CurrentVersion\App Paths\PUAPCT.exe ProductComponent
MyAppPathAlias -1 Software\Microsoft\Windows\CurrentVersion\App Paths\PUAPCT.exe [#MyAppFile] ProductComponent
MyAppPathRegistration -1 Software\Microsoft\Windows\CurrentVersion\App Paths\PUASample1.exe [#MyAppFile] ProductComponent

 

Автоматическая регистрация отмены воспроизведения

PUASample.msi выполняет регистрацию, которая позволяет пользователю приложения запретить запуск аппаратного автозапуска для выбранных устройств. Сведения о регистрации обработчика для отмены автоматического воспроизведения в ответ на событие см. в разделе "Подготовка оборудования и программного обеспечения для использования с автозапуском" в разделе расширяемости оболочки руководства разработчика оболочки. Следующая запись регистрирует обработчик, указанный в поле Name при установке компонента ProductComponent. Значение -1 в корневом поле необходимо указать установщику Windows, что регистрация должна быть перенаправлена в расположение, которое зависит от контекста установки.

Таблица реестра

Реестр Корневой Ключ. Имя. Значение Компонент
MyAutoplayCancelRegistration -1 SOFTWARE\Microsoft\Windows\CurrentVersion\Обозреватель\AutoplayHandlers\CancelAutoplay\CLSID 66A32FE6-229D-427b-A608-D273F40C034C ProductComponent

 

Регистрация обработчика предварительной версии

PUASample.msi выполняет регистрации, необходимые для установки обработчика предварительной версии, который позволяет просматривать файлы pua только для чтения без запуска приложения. Сведения о регистрации обработчиков предварительной версии см. в разделе "Регистрация предварительных обработчиков предварительного просмотра" в разделе расширения оболочки руководства разработчика оболочки. Следующие записи в таблице реестра регистрируют обработчик при установке компонента ProductComponent. Значение -1 в корневом поле необходимо указать установщику Windows, что регистрация должна быть перенаправлена в расположение, которое зависит от контекста установки.

Таблица реестра

Реестр Корневой Ключ. Имя. Значение Компонент
MyPreviewHandlerRegistration1 -1 Software\Classes\.pua puafile ProductComponent
MyPreviewHandlerRegistration2 -1 Software\Microsoft\Windows\CurrentVersion\PreviewHandlers {1531d583-8375-4d3f-b5fb-d23bbd169f22} Обработчик предварительной версии MICROSOFT Windows PUA TEST ProductComponent
MyPreviewHandlerRegistration3 -1 Software\Classes\puafile\ShellEx\{8895b1c6-b41f-4c1c-a562-0d564250836f} {1531d583-8375-4d3f-b5fb-d23bbd169f22} ProductComponent
MyPreviewHandlerRegistration4 -1 Software\Classes\CLSID\{1531d583-8375-4d3f-b5fb-d23bbd169f22} Пример 1 предварительного просмотра для каждого пользователя Applicationaton ProductComponent
MyPreviewHandlerRegistration5 -1 Software\Classes\CLSID\{1531d583-8375-4d3f-b5fb-d23bbd169f22} AppID {6d2b5079-2f0b-48ddd-ab7f-97cec514d30b} ProductComponent
MyPreviewHandlerRegistration6 -1 Software\Classes\CLSID\{1531d583-8375-4d3f-b5fb-d23bbd169f22} DisplayName @shell32,-38242 ProductComponent
MyPreviewHandlerRegistration7 -1 Software\Classes\CLSID\{1531d583-8375-4d3f-b5fb-d23bbd169f22} Icon notepad.exe,2 ProductComponent
MyPreviewHandlerRegistration8 -1 Software\Classes\CLSID\{1531d583-8375-4d3f-b5fb-d23bbd169f22}\InProcServer32 ThreadingModel Квартира ProductComponent
MyPreviewHandlerRegistration9 -1 Software\Classes\CLSID\{1531d583-8375-4d3f-b5fb-d23bbd169f22}\InProcServer32 #%%SystemRoot%\system32\shell32.dll ProductComponent
MyPreviewHandlerRegistration10 -1 Software\Classes\CLSID\{1531d583-8375-4d3f-b5fb-d23bbd169f22}\InProcServer32 ProgID puafile ProductComponent