WiX:CopyFile属性

时间:2009-01-21 15:40:37

标签: wix

在安装时我想有选择地将一些.ini文件从SOURCEDIR复制到TARGETDIR,这意味着从.msi文件所在的目录到应用程序所在的目标文件夹。

我做了<CopyFile Id="CopyIniFile" DestinationProperty="INSTALLDIR" SourceProperty="SOURCEDIR" SourceName="Dreem15.ini" Delete="no" />,但似乎没有做任何事情。日志文件没有多大帮助。

我已经成功地用CopyFile做了一个更精细的场景,我被这个简单的场景所困扰。

编辑:我在MoveFile表中有这些行:

|FileKey     |Component     |SourceName          |SourceFolder|DestFolder|Options
|CopyIniFile |CoAppLicAndIni|Dreem15.ini         |SOURCEDIR   |INSTALLDIR|0
|MoveDataFile|CoAppLicAndIni|Dreem10_Personal.mdf|DB_DIR10    |INSTALLDIR|0

第二个正在运作。在注册表中搜索DB_DIR10,如此

<Property Id="DB_DIR10">
    <RegistrySearch Id='DbDirSearch10' Type='raw' Root='HKLM' Key='Software\$(var.CompanyName)\$(var.MsdeInstance)' Name='Dreem10_Personal' />
</Property>

2 个答案:

答案 0 :(得分:4)

根据sourcedir property的Windows安装程序文档,它指向“包含源文件夹文件的根目录或安装包的源文件树”。

因此,要么您不知道SourceDir是预定义的Windows安装程序属性,要么您尝试从包含msi的安装介质中复制未打包的文件。在后一种情况下,将文件安装为普通组件可能更有意义,以便正确卸载它。

编辑我已经测试了“从安装媒体中复制”的方案,它对我有用。另外,我安装了

misexec /lvx* install.log /i mymsi.msi

并且日志确实显示了正在复制的文件。日志在你的案例中说了什么?

Edit2:虽然CopyFile对我有用,但更好的解决方案是将未压缩的媒体添加到您的wx中,如下所示:

<Media Id='2'/>

然后将File元素调整为可自定义的配置文件,如下所示:

<File Source='path\to\default\config.ini' Compressed='no' DiskId='2' />

这将使安装程序在与msi相同的文件夹中查找config.ini,结合可自定义和干净卸载的优点。

答案 1 :(得分:1)

您可以改为使用DestinationDirectory="INSTALLDIR",还是必须动态创建属性?

WIX Wiki CopyFile Element

这个wxs会把文件放在MSI中

<Component Id="myIni.ini" Guid="*">
  <File Id="myIni.ini" Name="myIni.ini" KeyPath="yes" Source="!(wix.Files)\myIni.ini">
    <CopyFile Id="CopyIni" DestinationProperty="TARGETDIR" />
  </File>
</Component>