其他分享
首页 > 其他分享> > c – 如何根据自定义操作中设置的属性安装功能?

c – 如何根据自定义操作中设置的属性安装功能?

作者:互联网

我试图根据应在自定义操作中设置的值从两个功能中安装一个.
首先,我设置了一个属性的值:

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和Execute立即执行之前调用我的自定义操作.

从安装日志中我确认已设置该属性.
但是,我的条件安装不起作用,因为似乎条件中的内容始终被评估为false.

我试过评估条件:
STREAM,STREAM = RED,STREAM =“RED”,< ![CDATA [STREAM = RED]] GT; 我已经没有想法该做什么,也会感激帮助.

解决方法:

我已经做了类似的事情,但我们最终在组件级别控制它(在加热期间使用变换将条件添加到< Component />元素而不是feature元素).但我们的条件使用CDATA,同时也使用双引号作为值,您没有在您尝试的内容中列出.首先,我要在您的功能中尝试以下条件:

<Condition><![CDATA[STREAM="RED"]]></Condition>
<Condition><![CDATA[STREAM="BLUE"]]></Condition>

如果仍然无效,我会尝试以下方法:

>将具有默认值的STREAM属性添加到WiX.然后使用该默认值对其进行测试,以查看是否将默认值设置为开头使其工作.这可能意味着您需要尽快设置属性,可能需要关闭UI事件. < Property Id =“STREAM”Value =“RED”/>
>作为最后的手段,您可以像我一样为每个组件添加条件,但我们只是出于非常具体的原因,希望您可以使用条件功能来处理上述建议!

我希望以上解决了你的问题,或者至少引导你找到答案!

标签:custom-action,c,windows-installer,wix
来源: https://codeday.me/bug/20190925/1816999.html