WiX. Я пишу плагин, который должен быть установлен только в одну из трех директорий. Поэтому я создаю диалог на заказ и вставить его в цепи:Почему свойство INSTALLFOLDER не было изменено через RadioButtonGroup?
Это мой код этого диалога:
<?xml version='1.0' encoding='Windows-1252'?>
<!-- SelectInstallDirectory.wxs
© Andrey Bushman, 2016
Dialog window for the install directory selection of AutoCAD extension. -->
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<UI>
<!--<Property Id="DefaultUIFont">DlgFont10</Property>-->
<TextStyle Id="DlgFont10" FaceName="Tahoma" Size="10" />
<TextStyle Id="DlgFont20" FaceName="Tahoma" Size="20" />
<TextStyle Id="DlgFont10_important" FaceName="Tahoma" Size="10" Red="255" Green="0" Blue="0"/>
<TextStyle Id="DlgTitleFont" FaceName="Tahoma" Size="10" Bold="yes" />
<!-- I am forced to define the INSTALLFOLDER again because SelectInstallDirectory dialog
doesnt see this property. -->
<Property Id="INSTALLFOLDER" Value="$(env.ProgramData)\Autodesk\ApplicationPlugins\ProxyTools.bundle\"/>
<!--This dialog selects the install directory through the RadioButton items.-->
<Dialog Id="SelectInstallDirectory" Title="AutoCAD extension location"
NoMinimize="yes" Width="400" Height="270">
<Control Id="TitleImage" Type="Bitmap" X="0" Y="0" Width="400" Height="65" Text="TitleImageFile">
<Binary Id="TitleImageFile" SourceFile="SelectInstallDirectory_banner.jpg"/>
</Control>
<Control Id="TitleText" Type="Text" X="60" Y="20" Width="400" Height="35"
Transparent="yes" NoPrefix="yes">
<Text>{\DlgFont20}Proxy Tools for AutoCAD</Text>
</Control>
<Control Id="Title" Type="Text" X="5" Y="85" Width="300" Height="15"
Transparent="yes" NoPrefix="yes">
<Text>Select the target directory for the AutoCAD extension installing:</Text>
</Control>
<Control Id="rbgrPath" Type ="RadioButtonGroup"
X="5" Y="100" Width="500" Height="100" Property="INSTALLFOLDER">
<RadioButtonGroup Property="INSTALLFOLDER">
<RadioButton
Text="[ProgramFilesFolder]Autodesk\ApplicationPlugins\ProxyTools.bundle\"
Value="[ProgramFilesFolder]Autodesk\ApplicationPlugins\ProxyTools.bundle\"
Height="13" Width="500" X="5" Y="5"/>
<RadioButton
Text="$(env.ProgramData)\Autodesk\ApplicationPlugins\ProxyTools.bundle\"
Value="$(env.ProgramData)\Autodesk\ApplicationPlugins\ProxyTools.bundle\"
Height="13" Width="500" X="5" Y="20"/>
<RadioButton
Text="$(env.AppData)\Autodesk\ApplicationPlugins\ProxyTools.bundle\"
Value="$(env.AppData)\Autodesk\ApplicationPlugins\ProxyTools.bundle\"
Height="13" Width="500" X="5" Y="35"/>
</RadioButtonGroup>
</Control>
<Control Id="warning_acad2012" Type="Text" X="5" Y="175" Width="100" Height="30"
Transparent="yes" NoPrefix="yes">
<Text>{\DlgTitleFont}WARNING</Text>
</Control>
<Control Id="warning_acad2012_text" Type="Text" X="10" Y="190" Width="380" Height="40"
Transparent="yes" NoPrefix="yes">
<Text>{\DlgFont10_important}Don't select the "$(env.ProgramData)\Autodesk\ApplicationPlugins\ProxyTools.bundle\" variant if you will use AutoCAD 2012, because its bundle-autoloader don't monitor of that directory.</Text>
</Control>
<Control Id="Back" Type="PushButton" X="205" Y="243" Width="70"
Height="17" Default="no" Text="<< Previous">
<Publish Event="NewDialog" Value="LicenseAgreementDlg">1</Publish>
</Control>
<Control Id="Install" Type="PushButton" X="280" Y="243" Width="56"
Height="17" Default="yes" Text="Install">
<Publish Event="NewDialog" Value="SetupTypeDlg">INSTALLFOLDER</Publish>
</Control>
<Control Id="Cancel" Type="PushButton" X="340" Y="243" Width="56" Height="17"
Default="no" Text="Cancel">
<Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
</Control>
</Dialog>
</UI>
</Fragment>
</Wix>
Обратите внимание, что я в файле SelectInstallDirectory.wxs
определить снова в INSTALLFOLDER
, потому что мой диалог не видит свойства INSTALLFOLDER
, если он определен в другом файле (смотрите ниже). Это правильно?
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="$(var.ADSK_LOCATION)">
<Directory Id="Adsk" Name="Autodesk">
<Directory Id="Adsk_Plugins" Name="ApplicationPlugins">
<Directory Id="INSTALLFOLDER" Name="$(var.EXTENSION_FOLDER_NAME)">
<Directory Id="LICENSE" Name="license"/>
<Directory Id="RESOURCES" Name="resources"/>
<Directory Id="HELP" Name="help"/>
<Directory Id="MENU" Name="menu">
<Directory Id="CUI" Name="cui"/>
<Directory Id="CUIX" Name="cuix"/>
</Directory>
<Directory Id="BIN" Name="bin">
<Directory Id="BIN_RU" Name="ru"/>
</Directory>
</Directory>
</Directory>
</Directory>
</Directory>
в Product
элемент Я добавил это:
<UI Id="MyWixUI_Mondo">
<UIRef Id="WixUI_Mondo" />
<UIRef Id="WixUI_ErrorProgressText" />
<!-- My dialog for the INSTALLFOLDER value getting. -->
<DialogRef Id="SelectInstallDirectory" />
<Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="SelectInstallDirectory" Order="3">LicenseAccepted = "1"</Publish>
<Publish Dialog="SetupTypeDlg" Control="Back" Event="NewDialog" Value="SelectInstallDirectory">1</Publish>
</UI>
Теперь мой пользовательский диалог существует в цепи. Но если в моем диалоговом окне выбрать другой вариант целевого каталога, то значение INSTALLFOLDER
фактически не изменится. Мой корень Feature
элемент использует значение переменной для ConfigurableDirectory
свойства (я использую этот атрибут только для отладки этого плагина):
<Feature Id="$(var.SolutionName)" Title="$(var.ProductName)" Description="The complete package." Display='expand'
Level="1" ConfigurableDirectory="INSTALLFOLDER" AllowAdvertise='no' InstallDefault='local' Absent='disallow'
TypicalDefault='install'>
Как я могу это исправить?