【问题标题】:Hot ti Install File just in the first time with WIX使用 WIX 首次热安装文件
【发布时间】:2020-08-29 07:58:09
【问题描述】:

我有一个组件

<Component Id="ProductComponent" Guid="7935315f-4242-4c7a-a02c-6fd256805356">
    <CreateFolder/>
      <File
          Id="propFile"
          Name="aaa.properties"
          DiskId="1"
          Source="$(var.Project.TargetDir)"
          Vital="yes"
          KeyPath="yes" ></File>
      <?endif?>

</Component>

我想在安装时复制文件,而不是升级。 但我找不到怎么做。

有什么想法吗?

【问题讨论】:

  • 如果可以,尝试在启动时生成文件?您还可以安装模板并使用它来创建真实文件。也可以下载设置文件(可能存在代理/防火墙问题)。
  • 我的意思是生成文件可以仅从代码(内部默认值)、从复制的模板文件然后通过代码更新或仅通过将模板文件从只读副本。以及其他各种选择。
  • ^^ 这个。最好将默认值和用户设置保存在自己的文件中,因为 MSI 想要管理它安装的文件。

标签: wix


【解决方案1】:

您是否尝试过使用Condition 元素。我认为您可以在 Component 元素内提供Condition 来检查产品是否已安装。如果未安装,则创建文件。

<Component Id="ProductComponent" Guid="7935315f-4242-4c7a-a02c-6fd256805356">
  <Condition> NOT Installed </Condition>
  <CreateFolder/>
  <File
       Id="propFile"
       Name="aaa.properties"
       DiskId="1"
       Source="$(var.Project.TargetDir)"
       Vital="yes"
       KeyPath="yes" ></File>
</Component>

【讨论】:

  • 基于 20 年的 MSI 经验,我不明白这将如何运作。对于首次安装和重大升级,这种情况总是会评估为真。对于维修和小升级/补丁,它根本不会被评估,因为组件不是传递的。使用初始安装状态(始终为 yes)。
  • @ChristopherPainter,我不是 Wix 专家。刚刚看到这个问题并试图帮助OP。我的目的是给 OP 一个关于 标签的想法,我添加了 NOT Installed 条件,因为我读到这个条件是只有在初始安装期间才会评估为 true 的条件,这正是 OP 想要的。请参阅此处 - msi-faq.wikidot.com/msi-conditions 或参阅此 SO 帖子 - stackoverflow.com/a/538876/1672927
  • 问题是你现在有一个不正确的答案(OP 显然没有测试解决方案)。为什么阅读:docs.microsoft.com/en-us/windows/win32/msi/component-table“请注意,除非为组件设置了属性列中的传递位,否则组件在安装后保持启用状态,即使条件列中的条件语句稍后在后续维护安装时评估为 False产品。”
  • 我添加了一个答案,我发现它可以帮助许多客户用我所知道的最简单更可靠的方法解决这个问题。
【解决方案2】:

这是 MSI(WiX 使用)的弱点。

MSI 安装文件 用户修改文件 MSI 去安装文件。应该:

a) 覆盖并丢失用户数据

b) 不会覆盖和丢失新的应用数据

c) 合并 --- MSI 不支持。

如果用户数据只有一个或几个属性,则可以使用自定义操作来收集用户数据并重新应用它,但这是非常棘手的事情。

IMO,解决此问题的最佳方法是永远不要将用户数据保存在安装程序安装的文件中。以 app.config appSettings 元素为例。它是一种属性,允许您使用覆盖第一个文件中的设置的另一个文件来扩展该文件。使用这种模式,安装程序可以设置应用程序配置,应用程序可以创建覆盖文件,一切正常,因为 MSI 根本不需要处理问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 2011-01-13
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多