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

时间:2012-03-28 07:31:11

标签: wix windows-installer

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

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

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

以前有人试过吗? 感谢。

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

3 个答案:

答案 0 :(得分:4)

解决。方法是:

  1. 指定应放置文件的自定义文件夹:

    <Property Id="MY_CUSTOM_DESTINATION" Value="D:\MyCustomFolder" />

  2. <Copy ..>指令放入应复制的<File ...>

  3. <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>
    

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

答案 1 :(得分:1)

对于硬编码目录,它违反Windows Installer最佳实践。你永远不能假设总会有D:甚至是C:。不过,客户已经(要求)要求我安装D:\ FOO。

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

此外,虽然CopyFile元素很有用,但实际上并不需要它,因为你可以将文件分成两次,而智能cabing会确保你的MSI不会因文件记录指向同一个条目而膨胀。媒体\出租车存储。

答案 2 :(得分:0)

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

<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>

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