1

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

这可能与文件吗?中的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>
4

1 回答 1

0

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

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

在卸载的情况下,您将需要将文件重命名回其原始位置的预安装步骤,或者此自定义操作可以删除文件,或者您可以强制删除 XML 中的文件夹。否则,即使卸载了应用程序,该文件仍将保留在磁盘上。

这是一项相当复杂的任务,但它是持久的。或者请重新考虑 2 个安装程序选项。

于 2014-03-05T15:59:16.387 回答