Значение переменной не меняется в зависимости от значения флажка из темы rtf - PullRequest
0 голосов
/ 28 мая 2018

Подготовка загрузочного приложения для установки некоторых MSI-пакетов.Есть возможность выбрать пакеты для установки.Но значение переменной не меняется в соответствии с выбором пользователя.Вот как я использую переменную в моем Bundle.wxs файле

<Variable Name="spectrumDb" Persisted="yes"  bal:Overridable="yes"  Value="1"  />
<Variable Name="spectrumGateway" Persisted="yes"  bal:Overridable="yes"  Value="1" />
<Variable Name="spectrumServiceManager" Persisted="yes"  bal:Overridable="yes" Value="1" />
<Variable Name="spectrumIISparts" Persisted="yes"  bal:Overridable="yes" Value="1"  />
<Variable Name="spectrumConnecter" Persisted="yes"  bal:Overridable="yes"  Value="1" />

У меня есть несколько флажков в теме rtf, чтобы пользователь мог выбрать компоненты для установки

<Page Name="Options">      
     <Text X="11" Y="65" Width="-11" Height="30" FontId="2" DisablePrefix="yes">Select components</Text>
     <Checkbox Name="spectrumDb" X="40" Y="120" Width="200" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="no"   >spectrumDb</Checkbox>
     <Checkbox Name="spectrumGateway" X="40" Y="140" Width="200" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="no">spectrumGateway</Checkbox>
     <Checkbox Name="spectrumServiceManager" X="40" Y="160" Width="200" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="no" >spectrumServiceManager</Checkbox>
     <Checkbox Name="spectrumIISparts" X="40" Y="180" Width="200" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="no" >spectrumIISparts</Checkbox>
     <Checkbox Name="spectrumConnecter" X="40" Y="200" Width="200" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="no" >spectrumConnecter</Checkbox>
</Page>

Программа установки устанавливается независимо отзначение флажка.Это часть журнала, где я нахожу, что

[0404:0B44][2018-05-28T08:43:07]i000: Running detect complete custom action
[0404:0B44][2018-05-28T08:43:07]i199: Detect complete, result: 0x0
[0404:178C][2018-05-28T08:43:09]i000: Setting numeric variable 'EulaAcceptCheckbox' to value 1
[0404:178C][2018-05-28T08:43:20]i000: Setting numeric variable 'spectrumDb' to value 1
[0404:178C][2018-05-28T08:43:20]i000: Setting numeric variable 'spectrumGateway' to value 1
[0404:178C][2018-05-28T08:43:20]i000: Setting numeric variable 'spectrumServiceManager' to value 1
[0404:178C][2018-05-28T08:43:20]i000: Setting numeric variable 'spectrumIISparts' to value 1
[0404:178C][2018-05-28T08:43:20]i000: Setting numeric variable 'spectrumConnecter' to value 1

Я использую wix 3.11 для создания этого проекта.ide is visual studio 2010. тип приложения начальной загрузки ref WixExtendedBootstrapperApplication.RtfLicense

1 Ответ

0 голосов
/ 28 мая 2018

Загрузчик установит переменную при запуске этой функции:

void SavePageSettings(
    __in WIXSTDBA_PAGE page
    )
{
    THEME_PAGE* pPage = NULL;

    pPage = ThemeGetPage(m_pTheme, m_rgdwPageIds[page]);
    if (pPage)
    {
        for (DWORD i = 0; i < pPage->cControlIndices; ++i)
        {
            // Loop through all the checkbox controls (or buttons with BS_AUTORADIOBUTTON) with names and set a Burn variable with that name to true or false.
            THEME_CONTROL* pControl = m_pTheme->rgControls + pPage->rgdwControlIndices[i];
            if ((THEME_CONTROL_TYPE_CHECKBOX == pControl->type) ||
                (THEME_CONTROL_TYPE_BUTTON == pControl->type && (BS_AUTORADIOBUTTON == (BS_AUTORADIOBUTTON & pControl->dwStyle)) &&
                pControl->sczName && *pControl->sczName))
            {
                BOOL bChecked = ThemeIsControlChecked(m_pTheme, pControl->wId);
                m_pEngine->SetVariableNumeric(pControl->sczName, bChecked ? 1 : 0);
            }

            // Loop through all the editbox controls with names and set a Burn variable with that name to the contents.
            if (THEME_CONTROL_TYPE_EDITBOX == pControl->type && pControl->sczName && *pControl->sczName && WIXSTDBA_CONTROL_FOLDER_EDITBOX != pControl->wId)
            {
                LPWSTR sczValue = NULL;
                ThemeGetTextControl(m_pTheme, pControl->wId, &sczValue);
                m_pEngine->SetVariableString(pControl->sczName, sczValue);
            }
        }
    }
}

Функция SetVariableNumeric ничего не будет записывать для уже существующей переменной.

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

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

...