WIX:将文件复制到另一个分区中的自定义目录
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WIX:将文件复制到另一个分区中的自定义目录相关的知识,希望对你有一定的参考价值。
我需要将我的应用程序的文件安装到C:\Program Files\MyApp
这样的常用位置
并且还需要将其中的几个复制到另一个分区中的自定义文件夹中
(让我们说D:\CustomFolder
,它允许硬编码)。
安装应该是安静的 - 没有gui或向导。并且所有内容都应该在一个* .msi文件中。
我可以通过CustomActions
做到这一点,但优雅的声明方式更可取。
有人曾尝试过这个吗? 谢谢。
更新:忘记提及,允许应该在单独分区上的文件在C:\Program Files\MyApp
中
解决了。方法是:
- 指定应放置文件的自定义文件夹:
<Property Id="MY_CUSTOM_DESTINATION" Value="D:\MyCustomFolder" />
- 将
<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\MyApp
和D:\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:将文件复制到另一个分区中的自定义目录的主要内容,如果未能解决你的问题,请参考以下文章