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]]>
У меня заканчиваются идеи, что делать, и буду признателен за помощь.