От MSI к WiX, часть 2 - Поддержка "Установка и удаление программ"
Главная страница серии здесь.
English version of this page is here.
Добавление поддержки для "Установка и удаление программ"
Группа свойств, хранящихся в таблице Property, хранит информацию, которую операционная система отображает в панели управления "Установка и удаление программ" (ARP).
Вот список свойств, относящихся к ARP:
- ARPCOMMENTS
- ARPCONTACT
- ARPPRODUCTICON
- ARPHELPLINK
- ARPREADME
- ARPURLINFOABOUT
- ARPURLUPDATEINFO
- ARPHELPTELEPHONE
- ARPAUTHORIZEDCDFPREFIX
- ARPSIZE
- ARPINSTALLLOCATION
Некоторые свойства ARP влияют на то, какие операции с установленной программой будут доступны пользователю:
Установка свойства ARPSYSTEMCOMPONENT в 1 (на самом деле, просто присутствие этого свойства в таблице Property с не важно каким значением) сделает программу невидимой в Add/Remove Programs.
Установка свойства ARPNOREMOVE в 1 спрячет или запретит (disable) (на Windows 2000 и Windows XP) кнопку Удалить (Remove) в Add/Remove Programs.
Установка свойства ARPNOMODIFY в 1 запретит (disable) кнопку Изменить/Modify (Change на Windows 2000) в Add/Remove Programs.
Установка свойства ARPNOREPAIR в 1 запретит (disable) кнопку Починить/Repair в Add/Remove Programs.
Всё относящееся к ARP мы поместим в отдельный файл ControlPanel.wxi. Вот содержимое этого файла:
<
Include>
<Property Id="ARPCOMMENTS" Value="Acme Corporation Comments" />
<Property Id="ARPCONTACT" Value="Put your name in here" />
<Property Id="ARPPRODUCTICON" Value="MainIcon.ico" />
<Property Id="ARPHELPLINK" Value="Your help link" />
<Property Id="ARPREADME" Value="Your README link" />
<Property Id="ARPURLINFOABOUT" Value="Your 'About' information" />
<Property Id="ARPURLUPDATEINFO" Value="Your 'Update' URL" />
<Property Id="ARPHELPTELEPHONE" Value="URL where users can find your support phone number" />
<Property Id="ARPAUTHORIZEDCDFPREFIX" Value="URL of the update channel for the application" />
<Property Id="ARPSIZE" Value="3" />
<!--
<Property Id="ARPNOMODIFY" Value="0" />
<Property Id="ARPNOREPAIR" Value="0" />
<Property Id="ARPNOREMOVE" Value="0" />
<Property Id="ARPSYSTEMCOMPONENT" Value="0" />
-->
<
Icon Id="MainIcon.ico" SourceFile="MainIcon.ico" />
<!--
Set up ARPINSTALLLOCATION property -->
<CustomAction Id="SetARPINSTALLLOCATION" Property="ARPINSTALLLOCATION" Value="[INSTALLDIR]" />
<!--
Sequences -->
<InstallExecuteSequence>
<Custom Action="SetARPINSTALLLOCATION" After="InstallValidate"></Custom>
</InstallExecuteSequence>
</Include>
Как Вы уже увидели, для того чтобы присвоить значение свойству, в большинстве случаев достаточно простого объявления элемента <Property> с атрибутом Id установленным в имя свойства и атрибутом Value - в его значение.
Ситуация немного сложнее когда мы задаём иконку для программы. Нам надо добавить элемент <Icon> и гарантировать, что значение атрибута Id элемента <Icon> имеет то же значение, что и атрибут Value элемента <Property> с атрибутом Id равным ARPPRODUCTICON. Атрибут SourceFile элемента <Icon> должен указывать на файл иконки.
Ещё более сложнее присвоить значение свойству ARPINSTALLLOCATION. Поскольку директория, где будет установлена программа, может быть изменена пользователем либо через пользовательский интерфейс, либо через командную строку, мы будем знать эту директорию только после того, как она будет утверждена (validated) инсталлятором (более подробно мы будем говорить об этом при обсуждении стандартных и пользовательских комманд (standard and custom actions)). Для того, чтобы присвоить значение свойству ARPINSTALLLOCATION нам надо добавить запись в таблицу CustomAction с пользовательской коммандой, которая присвоит свойству ARPINSTALLLOCATION значение свойства INSTALLDIR. Также, необходимо присвоить такой приоритет пользоательской команде, чтобы она исполнялась после стандартной команды InstallValidate.
Это исправленный файл Minimal.wxs:
<?
xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="https://schemas.microsoft.com/wix/2003/01/wi">
<
Product Id="{1EFFDCD2-4B4B-439E-8296-651795EE02D9}"
Name="Minimal Windows Installer Sample"
Language="1033"
Codepage="1252"
Version="1.0.0"
Manufacturer="Acme Corporation"
UpgradeCode="{15F9543C-1C8D-45D6-B587-86E65F914F20}">
<
Package Id="{909A6CE7-2739-4522-92C2-03AD7D7EE4CD}"
Description="Minimal Windows Installer Sample"
Comments="This installer database contains the logic and data required to install Minimal Windows Installer Sample."
InstallerVersion="200"
Languages="1033"
SummaryCodepage="1252"
Platforms="Intel"
ReadOnly="no"
Compressed="yes"
AdminImage="no"
Keywords="Installer"
ShortNames ="no"
Manufacturer="Acme Corporation" />
<?
include ControlPanel.wxi ?>
<
Media Id="1" />
<
Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLDIR" Name="Minimal" LongName="MinimalInstallation">
<
Component Id="Component1" Guid="{A77C5B06-132D-4884-8E17-EA10A83C812D}">
<CreateFolder />
</Component>
</
Directory>
</Directory>
</Directory>
<
Feature Id="Feature1"
Title="Feature1 title"
Description="Feature1 description"
Level="1"
ConfigurableDirectory="INSTALLDIR" >
<
ComponentRef Id="Component1" />
</
Feature>
</Product>
</Wix>
Установите программу и посмотрите на её свойства в ARP.
Что следующее
В следующий раз мы рассмотрим Поиск программ (application search) и Условия запуска инсталляции (launch conditions).
Comments
- Anonymous
August 14, 2009
Интересный пост, спасибо вам. Интересует только вопрос - будет ли продолжение? :)