WiX:CopyFile 属性

Posted

技术标签:

【中文标题】WiX:CopyFile 属性【英文标题】:WiX: CopyFile attributes 【发布时间】:2010-10-02 17:18:47 【问题描述】:

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

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

我已经成功地使用 CopyFile 完成了一个更复杂的场景,我对这个简单的场景感到困惑。

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

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

第二个正在工作。像这样在注册表中搜索DB_DIR10

    属性>

【问题讨论】:

【参考方案1】:

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

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

编辑:我已经测试了“从安装介质复制”方案,它对我有用。另外,我已经安装了

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

并且日志确实显示了正在复制的文件。日志在您的情况下是怎么说的?

Edit2:虽然 CopyFile 对我有用,但更好的解决方案是向您的 wxs 添加未压缩的介质,如下所示:

<Media Id='2'/>

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

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

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

【讨论】:

没错。我想要做的是通过将 ini 文件放在 msi 文件旁边,让支持人员有机会自定义设置。这将包含一些每个客户端的设置。显然,可以通过为每个客户进行转换 (mst) 来完成,但不要认为支持人员可以轻松创建这些。 它没有显示任何事情正在发生。 MoveFiles 是脚本化的,但后来没有 FileCopy 发生。你是怎么做到的?片段? 我只是复制粘贴了你的 sn-p 来测试它,它对我有用......但是你可以试试我上面解释的高级“未压缩媒体”选项。 糟糕,我的错。我觉得很愚蠢:错误的文件名! :-)) 它也在这里工作。我也想出了第二个媒体(愤怒地),并会试一试。现在我已经为 unistall 部分安装了 RemoveFile *.ini。感谢您的提示。【参考方案2】:

您可以改用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>

【讨论】:

它在文件或组件父元素下? CopyFile 目前位于单独的父组件下。如果无法轻松完成,将执行自定义操作。

以上是关于WiX:CopyFile 属性的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 CopyFile() 错误 5 - 拒绝访问错误

FileUtils.copyFile()的2个参数是啥

如何在 Visual C++ 中正确调用 CopyFile 函数?

CopyFile

转:CopyFile函数用法

012 CopyFile