【问题标题】:Conditionally include and rename file in wix有条件地在wix中包含和重命名文件
【发布时间】:2013-05-20 12:27:01
【问题描述】:

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

File 可以做到这一点吗? File 中的 Name 属性似乎在构建时重命名文件,而不是在安装时。我试图避免使用单独的 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>

【问题讨论】:

  • 您的样本看起来不错。什么不适合它?
  • wix 使用这两个文件构建安装包。由于它们具有相同的名称,它会覆盖其中一个。我希望这两个文件都以 32/64.dll 的形式存在于安装程序中,并且只安装其中一个,重命名文件。

标签: wix installation wix3.7


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-11
    • 2013-09-17
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 2022-11-19
    相关资源
    最近更新 更多