最佳实践WIX条件安装版本的软件

时间:2015-05-29 18:00:49

标签: c# .net wix

我有一个插件(在后台运行的服务),我需要在各种计算机上安装。我需要根据他们安装的.Net版本安装不同版本的服务。

.Net 3.5获得3.5版本的插件 .Net 4.5获得4.5版本的插件等。

我知道如何使用各种NETFRAMEWORK ...属性在WIX中检测.Net版本,但我在安装插件的所有版本而不是我想要的版本时遇到了麻烦。

<Feature Id="ProductFeature451" Title="Plugin" Level="1">
            <Condition Level="1">
                <![CDATA[REMOVE~="ALL" OR (NETFRAMEWORK45 >= "#378675")]]>
            </Condition>
            <ComponentGroupRef Id="ProductComponents451" />
        </Feature>

        <Feature Id="ProductFeature40" Title="Plugin" Level="1">
            <Condition Level="1">
                <![CDATA[REMOVE~="ALL" OR (NETFRAMEWORK45 < "#378675" AND NETFRAMEWORK40FULL) ]]>
            </Condition>
            <ComponentGroupRef Id="ProductComponents40" />
        </Feature>

        <Feature Id="ProductFeature351" Title="Plugin" Level="1">
            <Condition Level="1">
                <![CDATA[REMOVE~="ALL" OR (NETFRAMEWORK35 AND NOT NETFRAMEWORK45 AND NOT NETFRAMEWORK40FULL) ]]>
            </Condition>
            <ComponentGroupRef Id="ProductComponents351" />
        </Feature>

我尝试使用“已安装”而不是REMOVE~ =“ALL”,但同样的问题。我有错误的地方吗?

在早期的尝试中,我遇到了“引用计数”问题,因为我试图将各种插件安装到同一目录中,所以现在我尝试根据插件版本安装到不同的目录中。

安装所有版本实际上并不是世界末日,但我需要为正确版本创建/运行该服务。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

好的,我弄明白了这个问题。

从Level =&#34; 0&#34;开始所需的功能(未安装)。然后条件将它们标记为Level =&#34; 1&#34;当遇到并因此将被安装。

 <Feature Id="ProductFeature351" Title="Plugin" Level="0">
            <Condition Level="1">
                <![CDATA[REMOVE~="ALL" OR (NETFRAMEWORK35 AND NOT NETFRAMEWORK45 AND NOT NETFRAMEWORK40FULL) ]]>
            </Condition>
            <ComponentGroupRef Id="ProductComponents351" />
        </Feature>