【问题标题】:How do I force wix to update a file before manipulating it on an upgrade如何在升级操作之前强制 wix 更新文件
【发布时间】:2011-04-05 22:16:34
【问题描述】:

我有一个 wix 安装程序,它将安装一个 XML 文件,然后对其进行修改。安装效果很好。今天,我需要在这个 XML 文件中添加几个节点。所以我修改了原始文件,然后在 wix 中添加了一些额外的指令来分配这些项目的值。

好吧,每次我说它找不到节点时都会出错。我查看它在目录中有什么文件,它仍然有没有节点的旧文件。如何告诉它先替换 XML 文件,然后再修改它?我不想使用“CreateElement”,因为如果元素已经存在,我不知道如何不创建它(还没有尝试过,所以也许它会起作用)。此外,我希望我的 XML 文件成为配置的定义。

这是我的 XML 示例:

      <Component Id="MyProgExeConfigComponent" Guid="*">
    <File
      Id="MyProgExeConfig"
      Name="MyProg.exe.config"
      DiskId="1"
      Source="../Published/MyProg/MyProg.exe.config"
      PatchWholeFile="yes"
      KeyPath="yes"/>
    <util:XmlFile
      Id="MyProgExeConfigUser"
      Action="setValue"
      Permanent="yes"
      File="[INSTALLLOCATION]\MyProg.exe.config"
      ElementPath="/configuration/appSettings/add[\[]@key='UserName'[\]]"
      Name="value"
      Value="[USER]"/>
    <util:XmlFile
      Id="MyProgExeConfigPassword"
      Action="setValue"
      Permanent="yes"
      File="[INSTALLLOCATION]\MyProg.exe.config"
      ElementPath="/configuration/appSettings/add[\[]@key='Password'[\]]"
      Name="value"
      Value="[PASSWORD]" />

有什么想法吗?

【问题讨论】:

    标签: xml wix upgrade


    【解决方案1】:

    Windows Installer 可能不会覆盖该文件,因为您的 INSTALLMODE=omus 并且 XML 的创建和修改日期不同。

    XML 文件是它自己组件的关键文件吗?如果是这样,请尝试使用 File@DefaultVersion 属性来欺骗 Windows Installer 认为新文件有一个版本 #(我们在谷歌搜索时称之为“版本谎言”),因此胜过非版本文件。您的文件将被覆盖,然后可以从那里应用您的 XML 更新。

    【讨论】:

    • 甜蜜!那行得通。再次感谢,克里斯。现在每次更改 XML 文件时都需要增加这个版本吗?
    • 没有。我通常只是将版本设置为上限( 65535.65535.65535.65535 )或类似的,你很好。真正部署的文件永远不会有版本号。
    【解决方案2】:

    这里有一些其他选项:Forcing an upgrade of a file that is modified during its initial installation。我个人最喜欢伴随文件的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 2011-07-07
      • 2020-12-11
      相关资源
      最近更新 更多