在安装时我想有选择地将一些.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>
答案 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"
,还是必须动态创建属性?
这个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>