有条件地在wix中包含和重命名文件

时间:2013-05-20 12:27:01

标签: wix installer wix3.7

我有一个安装程序,其中包含一个32位和64位版本的第三方库。该库带有一个32位和64位文件夹,文件名相同。我所做的是将文件重命名为具有不同的32/64名称,以便两者都可以包含在安装程序中。我正在尝试在FILE标记中设置以有条件地包含该文件,但也将其重命名为其基本名称efxzlib.dll。

这可以用File吗? Name中的File属性似乎在构建时重命名文件,而不是安装时间。我试图避免单独的32位和64位安装程序,因为这个DLL是唯一的唯一32/64组件。这是通过托管自定义操作最好地完成的吗?

  <Component Id="CMP_EFX_ZLIB_32BIt" Guid="MY_GUID1">
    <Condition>
      <![CDATA[NOT(VersionNT64)]]>
    </Condition>
    <File Id="FILE_EFX_ZLIB_32BIt" KeyPath="yes" Source="$(var.EFX5LibraryBase32bit)\efxzlib32.dll" Name="efxzlib.dll" />
  </Component>
  <Component Id="CMP_EFX_ZLIB_64BIt" Guid="{MY_GUID2}">
    <Condition>
      <![CDATA[VersionNT64]]>
    </Condition>
    <File Id="FILE_EFX_ZLIB_64BIt" KeyPath="yes" Source="$(var.EFX5LibraryBase64bit)\efxzlib64.dll" Name="efxzlib.dll" />
  </Component>

1 个答案:

答案 0 :(得分:0)

这对于典型的Windows安装程序来说有点不寻常,所以我怀疑这可以通过WiX方式实现。要以正确的方式执行此操作,应该有两个安装程序,一个用于32位系统,另一个用于64位系统。因此,如果你坚持你的安装设计,你最终会得到一个可以在两个系统上安装的32位安装程序;反过来说不合适。因此,在这种情况下,我建议在安装后自定义操作中进行文件重命名。请记住,您需要获得管理员权限才能这样做。此外,您还需要通过更新,卸载和重新安装来解决问题。

如果更新和重新安装,如果这适用于您的情况,则需要再次安装后自定义操作。

如果是卸载,您需要预安装步骤将文件重命名回原点,或者此自定义操作可以删除文件,或者您可以在XML中强制执行文件夹删除。否则,即使卸载了应用程序,该文件仍将保留在磁盘上。

这是一项非常复杂的任务,但却很耐用。或者请重新考虑2个安装程序选项。