我目前正在尝试在满足特定条件时安装功能(在维护模式下)。但是,该功能本身并未在维护中运行。
更具体地说,这是我到目前为止所做的:
我创建了一个选择框,它有两个值,“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
可能是我的属性没有在功能中使用?
我注意到即使只是解释这个问题也不容易,可能是我使用了完全错误的方法。如果是这样,请善待;-)。