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 属性的主要内容,如果未能解决你的问题,请参考以下文章