WiX:如何有条件地安装维护功能?

时间:2013-10-02 13:39:54

标签: wix installer wix3.6 maintenance

我正在尝试在满足特定条件时安装功能(在维护模式下)。 但是,该功能本身并未在维护中运行。

更具体地说,这是我到目前为止所做的:

我创建了一个包含两个值的选择框,“0”和“1”(下面):

控制我的.wxs文件:

<Control Type="ComboBox" Id="Excel2003_Combobox" Width="75" Height="14" X="165" Y="87" ComboList="yes" Property="INSTALLEXCEL2003">
    <ComboBox Property="INSTALLEXCEL2003">
        <ListItem Text="No" Value="0" />
        <ListItem Text="Yes" Value="1" />
    </ComboBox>
</Control>

有了这个,我能够检查用户是否想要安装特定组件,因为我有一个合适的条件(见下文,代码被评论):

.wxs文件中的组件:

<Component Id="externals.dll" Guid="37F189E7-47A8-4614-8EC5-AD5A87F7F8A6">
<!--<Condition><![CDATA[INSTALLEXCEL2003="1"]]></Condition>-->
    <File Id="externals.dll" Name="externals.dll" KeyPath="yes" ShortName="EXTERN~1.dll" Assembly=".net" AssemblyManifest="externals.dll" AssemblyApplication="externals.dll" DiskId="1" Source="dlls\externals.dll">
    </File>
</Component>
<Component Id="Microsoft.Office.Interop.Excel.dll" Guid="26D7B9E1-DB29-46DF-98A2-8DCD15AA7392">
<!--<Condition><![CDATA[INSTALLEXCEL2007="1"]]></Condition>-->
    <File Id="Microsoft.Office.Interop.Excel.dll" Name="Microsoft.Office.Interop.Excel.dll" KeyPath="yes" ShortName="Int_Exl.dll" Assembly=".net" AssemblyManifest="Microsoft.Office.Interop.Excel.dll" AssemblyApplication="Microsoft.Office.Interop.Excel.dll" DiskId="1" Source="dlls\Microsoft.Office.Interop.Excel.dll">
    </File>
</Component>

这个工作正常,直到决定在MSI中启用维护模式(这是有用的和逻辑,顺便说一句。)。

我之前只有一个功能负责所有组件。现在,我将它分成几个特征(为了便于阅读,这里只有两个):

我的.wxs文件中的功能:

<Feature Id="DefaultFeature1" Title="Main Feature 1" Level="0" InstallDefault="local" TypicalDefault="install">
    <ComponentRef Id="externals.dll" />
    <Condition Level="1">INSTALLEXCEL2003="1"</Condition>        
</Feature>
<Feature Id="DefaultFeature2" Title="Main Feature 2" Level="1">
    <ComponentRef Id="Microsoft.Office.Interop.Excel.dll" />
</Feature>


我认为仅仅在功能中输入条件就足够了(将功能级别设置为“1”也没有帮助)。不幸的是,这两种变体都不起作用:

<Condition Level="1">INSTALLEXCEL2003="1"</Condition>
<Condition Level="1"><![CDATA[INSTALLEXCEL2003>="1"]]></Condition>

我记录了整个 msiexcec install 命令,它说我的'DefaultFeature1'(和我要安装的文件'externals.dll')在维护模式下没有被请求:< / p>

MSI (s) (9C:C4) [14:59:35:171]: Doing action: InstallValidate
MSI (s) (9C:C4) [14:59:35:171]: Note: 1: 2205 2:  3: ActionText 
Action start 14:59:35: InstallValidate.
MSI (s) (9C:C4) [14:59:35:171]: Feature: DefaultFeature1; Installed: Absent;   Request: Null;       Action: Null
MSI (s) (9C:C4) [14:59:35:171]: Feature: DefaultFeature2; Installed: Local;   Request: Null;   Action: Null
MSI (s) (9C:C4) [14:59:35:171]: Component: externals.dll; Installed: Absent;   Request: Null;   Action: Null
MSI (s) (9C:C4) [14:59:35:171]: Component: Microsoft.Office.Interop.Excel.dll; Installed: Local;   Request: Null;   Action: Null

可能是我的属性没有在功能中使用吗?

我注意到即使只是解释这个问题并不容易,但可能是我使用了一种完全错误的方法。如果是这样,请善待; - )。

0 个答案:

没有答案