Как создать условное свойство в WiX? (Почти как если-то) - PullRequest
4 голосов
/ 26 января 2009

У меня есть проект WiX, который устанавливает несколько файлов EXE. Одним из них является исполняемый файл «Main», а другие поддерживают программы, помогающие диагностировать проблемы.

Основной исполняемый файл не является обязательным, и программы поддержки будут работать самостоятельно. Часто конечный пользователь устанавливает стороннюю программу вместо моего основного исполняемого файла.

В конце установщика WiX я хочу установить флажок «Запустить программу», который запустит программу, как только установщик закроется.

Я могу скрыть флажок на основе свойства INSTALLLEVEL, но он меняется только в зависимости от того, выбрал ли пользователь «Обычную» или «Завершенную» установку. Я хотел бы скрыть это в зависимости от того, установлена ​​ли основная исполняемая функция или нет.

Примерно так было бы идеально:

<Feature Id='MainProgram' Title='MainExe'
         Description='This application stores and displays information from our hardware.'
         ConfigurableDirectory='INSTALLDIR' Level='4'
         AllowAdvertise='no'>
    <ComponentRef Id='MainExecutable' />
    <ComponentRef Id='SQLLibrary' />
    <ComponentRef Id='ProgramIcon' />
    <ComponentRef Id='RemovePluginsFolder'/>
    <Property Id='ShowFinalCheckbox'>1</Property> #<--This won't work, but I'd like it to.
</Feature>

Ответы [ 3 ]

10 голосов
/ 26 января 2009

Элемент SetProperty может использоваться для изменения значения свойства до или после действия. Чтобы установить значение, основанное на состоянии установки исполняемого файла, я бы использовал комбинацию состояний компонентов, описанную в синтаксисе условного оператора в MSI SDK . Вам придется поиграться с этим примером, но я думаю, что это приблизит вас.

<SetProperty Id="ShowFinalCheckBox" Value="1" After="CostFinalize">?MainExecutableComponent&gt;2 OR $MainExecutableComponent&gt;2</SetProperty>

Вся магия там объясняется в ссылке на MSI SDK выше.

1 голос
/ 26 января 2009

Для WiX 2 вы можете использовать & Feature, чтобы узнать, установлена ​​эта функция или нет:

<Dialog Id="ExitDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
    <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17"
             Default="yes" Cancel="yes" Text="Finish">
      <Publish Event="EndDialog" Value="Return">1</Publish>
      <Publish Event="DoAction" Value="LaunchFile">(NOT Installed) AND (LAUNCHPRODUCT = 1) AND (&amp;MainExecutable = 3)</Publish>
    </Control>
    <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="Cancel" />
    <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
    <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="Back" />
    <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
      <Text>Click the Finish button to exit the Wizard.</Text>
    </Control>
    <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
    <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
      <Text>{\VerdanaBold13}Completing the [ProductName] Wizard</Text>
    </Control>
    <Control Id="Launch" Type="CheckBox" X="135" Y="120" Width="150" Height="17"
             Property="LAUNCHPRODUCT" CheckBoxValue="1">
      <Text>Launch [ProductName]</Text>
      <Condition Action="hide">
        NOT (&amp;MainProgramFeature = 3)
      </Condition>
    </Control>
  </Dialog>

Таким образом, вы можете скрыть диалоговое окно и использовать то же условие, чтобы не запускать программу (независимо от исходного состояния флажка).

0 голосов
/ 23 июня 2009

Это хорошо задокументировано в руководстве, Как: запустить установленное приложение после установки .

...