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