WIX:将文件复制到另一个分区中的自定义目录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WIX:将文件复制到另一个分区中的自定义目录相关的知识,希望对你有一定的参考价值。

我需要将我的应用程序的文件安装到C:\Program Files\MyApp这样的常用位置 并且还需要将其中的几个复制到另一个分区中的自定义文件夹中 (让我们说D:\CustomFolder,它允许硬编码)。

安装应该是安静的 - 没有gui或向导。并且所有内容都应该在一个* .msi文件中。

我可以通过CustomActions做到这一点,但优雅的声明方式更可取。

有人曾尝试过这个吗? 谢谢。

更新:忘记提及,允许应该在单独分区上的文件在C:\Program Files\MyApp

答案

解决了。方法是:

  1. 指定应放置文件的自定义文件夹: <Property Id="MY_CUSTOM_DESTINATION" Value="D:\MyCustomFolder" />
  2. <Copy ..>指令放入<File ...>中,应该复制
<DirectoryRef Id="MyAppFolderThatIsInProgramFiles">
     <Component Id="MyComponent" Guid="some_guid">
      <File Id="MyFileXml" Source="MyFile.xml" KeyPath="yes" >
          <CopyFile Id="Copy_MyFileXml" DestinationProperty="MY_CUSTOM_DESTINATION"/>
      </File>
     </Component>
</DirectoryRef>

附:作为副作用,<File Id="MyFileXml" ... />中指定的文件将被放入两个位置:C:\Program Files\MyAppD:\MyCustomFolder,但这对我的任务是正确的。

另一答案

这是硬编码目录的Windows Installer最佳实践。你永远不能假设总会有D:甚至是C:。不过,客户已经要求(要求)我在D:\ FOO上安装了一些东西。

那么,如何让客户满意并让安装仍然“工作”在没有D的VM上?通过自定义操作在安装时重定向目录,该操作仅在D:是固定硬盘时重定向它。

此外,虽然CopyFile元素很有用,但它并不是真正需要的,因为您可以将文件分成两次,而智能电缆组将确保您的MSI不会因为文件记录指向media \ cab中的相同条目而膨胀存储。

另一答案

您只需在目录标记下描述您的磁盘结构:

<Property Id="DRIVE_1" Value="c:\" />
<Property Id="DRIVE_2" Value="d:\" />
<Property Id="DRIVE_3" Value="e:\" />

<Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="DRIVE_1" />
    <Directory Id="DRIVE_2" />
    <Directory Id="DRIVE_3" />
</Directory>

我不主张硬编码,但你明白了。

以上是关于WIX:将文件复制到另一个分区中的自定义目录的主要内容,如果未能解决你的问题,请参考以下文章

Wix 自定义卸载操作 - 如何在 msi 删除文件之前运行

将动态属性传递给延迟的自定义操作 WIX

WIX 中功能的自定义操作

使用Wix安装后删除目录和文件

将文件复制到另一个名称的同一目录

批处理文件合并另一个批处理,将目录中的修改文件复制到另一个目录