SourceProperty 作为 CopyFile 中的嵌套目录

SourceProperty as Nested Directory in CopyFile

我想使用 WIX 安装程序将两个文件从现有位置复制到新位置。 INSTALLDIR 和目标目录已经定义。在 SourceProperty 中,首先我想使用 INSTALLDIR\P\X\Y,其次我想使用 INSTALLDIR\Q\X\Y

<ComponentGroup Id="aYML" Directory="INSTALLDIR">
   <Component Id="CopyaYML" Guid="" Transitive="yes">
     <CopyFile Id ="aYMLcopy" SourceProperty="INSTALLDIR\P\X\Y" SourceName="A.yml" DestinationProperty="Destination"/>
     <CreateFolder/>
   </Component>
</ComponentGroup>
<ComponentGroup Id="bYML" Directory="INSTALLDIR">
   <Component Id="CopybYML" Guid="" Transitive="yes">
      <CopyFile Id ="bYMLcopy" SourceProperty="INSTALLDIR\Q\X\Y" SourceName="B.yml" DestinationProperty="Destination"/>
      <CreateFolder/>
   </Component>
</ComponentGroup>

WIX 中不允许使用 \ 如何实现?

has to be 一个 属性 名称,它具有有限的字母、数字和下划线字符集。您可以使用 SetProperty 自定义操作(类型 19)使用目录 ID 和文件名甚至 [#fileId] 属性 格式来格式化值,尽管这在旧版本中不可靠Windows 个安装程序。

InstallFiles 之前但在 CostFinalize 之后,您可以这样做:

<SetProperty Id="AYMLPATH" Before="InstallFiles" Sequence="execute" value="[ParentDirectoryId]A.yml" />

不过,使用 SourceDirectory 属性并指定目录 ID 可能更容易。

不过,复制文件可能会导致某些服务场景出现问题。例如,如果您在补丁中复制文件,则更改无法回滚。如果文件很小,只需复制文件即可。甚至有复制文件记录的技巧,但在 CAB 中保留单个文件 blob,但不在本答案的范围内。