b) Сторнирование уровней условий, чтобы функция имела уровень условия 1, а условие - уровень 0. Это означает, что функция всегда установлена, если выражение условия не является ложным.

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

UINT __stdcall ConfigurationCheckAction(MSIHANDLE hInstall)
{
    HRESULT hr = S_OK;
    UINT er = ERROR_INSTALL_FAILURE;

    hr = WcaInitialize(hInstall, "ConfigurationCheckAction"); 
    if (condition) {
         MsiSetProperty( hInstall, TEXT("STREAM"), TEXT("RED") );
    }
    else {
         MsiSetProperty( hInstall, TEXT("STREAM"), TEXT("BLUE") );
    } 
    return WcaFinalize(er);
}

Во-вторых, я делаю два условия на две функции:

<Feature Id='Complete' Level='1'>
     <Feature Id="Red" ConfigurableDirectory="TARGETDIR" Title="F1" Level="0">
     <Condition Level="1">STREAM</Condition>
     </Feature>
     <Feature Id="Blue" ConfigurableDirectory="TARGETDIR" Title="F2" Level="0">
     <Condition Level="1">NOT STREAM</Condition>
     </Feature>
</Feature>

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

Мое настраиваемое действие вызывается до установки InstallInitialize и немедленного выполнения.

Из журнала установки у меня есть подтверждение, что свойство установлено. Однако моя условная установка не работает, так как кажется, что то, что находится в условии, всегда оценивается как ложное.

Я пытался оценить условия: STREAM, STREAM = RED, STREAM = "RED", <! [CDATA [STREAM = RED]]>

У меня заканчиваются идеи, что делать, и буду признателен за помощь.

Ответы на вопрос(3)

Ваш ответ на вопрос