1

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

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

我创建了一个选择框,它有两个值,“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 安装命令,它说我的“DefaultFeature1”(和我想要安装的文件“externals.dll”)在维护模式下没有被请求:

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

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

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

4

0 回答 0