如何根据WIX中的条件跳过子目录?

时间:2012-01-02 10:00:32

标签: wix

我正在使用以下代码,

<Directory Id="dir2" Name="Folder">
   <Component Id="comp_one" Guid="{0D827414-5629-48A0-9DC1-9344C5C6EBFC}">
       <Condition>INSTALLSAMPLES</Condition>
       <File Id="file_one" Source="..\..\..\fileone.exe" />
   </Component>
</Directory>

上面的代码工作正常,如果条件为false,则跳过Folder

但是,如果Folder为false,则会创建以下代码SubFolderCondition。是否有任何解决方案可以根据条件跳过目录?

<Directory Id="dir1" DiskId="3" Name="Folder">
   <Directory Id="dir2" Name="SubFolder">
      <Component Id="comp_one" Guid="{0D827414-5629-48A0-9DC1-9344C5C6EBFC}">
         <Condition>INSTALLSAMPLES</Condition>
         <File Id="file_one" Source="..\..\..\fileone.exe" />
      </Component> 
   </Directory>
</Directory>

请帮我解决问题。

2 个答案:

答案 0 :(得分:2)

根据丰富的经验,我建议组件条件不能很好地扩展。它们真的适用于像VersionNT和Not VersionNT这样的东西,你可能需要在Win 9X上安装一个DLL / EXE,在NT / 2K / XP等上安装另一个互斥文件。

相反,您应该将这些组件与功能相关联,并让用户使用“自定义设置”对话框启用/禁用该功能。使用“特征条件”和/或“添加本地/删除控制事件”可以进行更复杂的抽象。

您使用名为INSTALLSAMPLES的属性的事实告诉我您应该有一个名为SAMPLES的功能。

答案 1 :(得分:0)

其目标文件夹是MSI组件的“标识”的一部分。无条件地在几个目标文件夹中“浮动”单个组件。但是,您始终可以定义多个组件,每个组件都定位到不同的文件夹,但是来自同一个文件,并有条件地安装一个或另一个(或两者!)。

但是Painter先生知道他在谈论什么(几乎所有的安装问题)。最佳实践是调整功能(组件集合),而不是直接组件。