Как проверить значения в WiX?
У меня есть следующее в WiX:
Диалоговое окно предлагает два флажка для установки программного обеспечения для Excel 2007 и / или Excel 2010.
<Control Type="CheckBox" Id="Excel2007" Width="88" Height="17" X="22" Y="120" Text="Excel 2007" Property="INSTALLEXCEL2007_2010" CheckBoxValue="1" />
<Control Type="CheckBox" Id="Excel2010" Width="88" Height="17" X="22" Y="120" Text="Excel 2010" Property="INSTALLEXCEL2010" CheckBoxValue="1" />
Я хочу оценить, какой флажок был установлен пользователем, чтобы проверить, установлены ли PIA (инструменты для Excel 2007 / 2010). Если нет, установка должна быть приостановлена с сообщением.
Текущая проблема:
Я не могу проверить эти два значения в качестве условия запуска, потому что я не знаю решение пользователя. Я думал, что я мог бы использовать условие в диалоге, где флажки, как это:
<Publish Dialog="ExcelConfigDlg" Control="ExcelConfigDlg_Proceed" Event="NewDialog" Value="InstallDirDlg"><![CDATA[INSTALLEXCEL2007>="1"]]></Publish>
Тем не менее, это не работает. При нажатии на кнопку, процедура установки продолжается.
Как я могу исправить эту проблему?
2 ответа
Я хотел проверить значение флажка и, в зависимости от этого, проверить еще несколько значений (полученных через RegistrySearch). До сих пор я получил следующее (которое работает до сих пор):
<Publish Dialog="ExcelChooserDlg" Control="ExcelChooser_Weiter" Event="NewDialog" Value="FileConfigDlg" Order="1"><![CDATA[INSTALLEXCEL2003="1" OR INSTALLEXCEL2007="1" OR INSTALLEXCEL2010="1"]]></Publish>
<Publish Dialog="ExcelChooserDlg" Control="ExcelChooser_Weiter" Event="SpawnDialog" Value="CancelDlg" Order="2"><![CDATA[INSTALLEXCEL2003<>"1" AND INSTALLEXCEL2007<>"1" AND INSTALLEXCEL2010<>"1"]]></Publish>
<Publish Dialog="ExcelChooserDlg" Control="ExcelChooser_Weiter" Event="SpawnDialog" Value="CancelDlg" Order="3"><![CDATA[INSTALLEXCEL2007="1" AND OFFICERUNTIME<"10.0.31007"]]></Publish>
<Publish Dialog="ExcelChooserDlg" Control="ExcelChooser_Weiter" Event="SpawnDialog" Value="CancelDlg" Order="4"><![CDATA[INSTALLEXCEL2007="1" AND OFFICERUNTIME<"10.0.31007" AND OFFICE_2007_PIA<>"Microsoft Office 2007 Primary Interop Assemblies"]]></Publish>
<Publish Dialog="ExcelChooserDlg" Control="ExcelChooser_Weiter" Event="SpawnDialog" Value="CancelDlg" Order="5"><![CDATA[INSTALLEXCEL2010="1" AND OFFICERUNTIME<"10.0.31007" AND OFFICE_2010_PIA<>"Microsoft Office 2010 Primary Interop Assemblies"]]></Publish>
Я не уверен, что это лучшее лучшее решение, но, как я уже сказал, оно работает для меня до сих пор.
Отвечая на ваш первый и второй вопрос:
<Publish Dialog="ExcelConfigDlg" Control="ExcelConfigDlg_Proceed" Event="NewDialog" Value="InstallDirDlg"><![CDATA[INSTALLEXCEL2007_2010="1"]]></Publish>
Я думаю, что вы хотите поднять, скажем, диалоговое окно с предупреждением, если пользователь не установит ни один из флажков. Это пример одного из моих предупреждений:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<UI>
<Dialog Id="WarningDlg" Width="260" Height="85" Title="!(loc.Title)">
<Control Id="Ok" Type="PushButton" X="112" Y="57" Width="56" Height="17" Default="yes" Cancel="yes" Text="Ok">
<Publish Event="EndDialog" Value="Return">1</Publish>
</Control>
<Control Id="Text" Type="Text" X="48" Y="15" Width="194" Height="30" NoPrefix="yes" Text="!(loc.IntegerOnlyDlgDecription)" />
<Control Id="Icon" Type="Icon" X="15" Y="15" Width="24" Height="24" FixedSize="yes" IconSize="32" Text="Exclamation" />
</Dialog>
</UI>
</Fragment>
и используйте следующее:
<Publish Dialog="ExcelConfigDlg" Control="ExcelConfigDlg_Proceed" Event="SpawnDialog" Value="WarningDlg"><![CDATA[(INSTALLEXCEL2007_2010<>"1") AND (INSTALLEXCEL2010<>"1")]]></Publish>