代码之家  ›  专栏  ›  技术社区  ›  wqw

WiX:CopyFile属性

wix
  •  8
  • wqw  · 技术社区  · 17 年前

    安装时,我想选择性地将一些.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 回复  |  直到 17 年前
        1
  •  4
  •   Wim Coenen    17 年前

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

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

    编辑: 我测试了“从安装介质复制”的场景,它对我有效。此外,我还安装了

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

    日志确实显示了正在复制的文件。在你的案例中,日志上写着什么?

    编辑2: 虽然CopyFile对我有效,但更好的解决方案是向wxs添加一个未压缩的介质,如下所示:

    <Media Id='2'/>
    

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

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

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

        2
  •  1
  •   Yan Sklyarenko    13 年前

    你能用吗 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>
    
    推荐文章