【问题标题】:Updating a property value when changing features with a Wix installer使用 Wix 安装程序更改功能时更新属性值
【发布时间】:2012-01-11 04:41:26
【问题描述】:

我有一个用 Wix 编写的安装程序。安装程序 UI 允许用户选择一些设置。例如,有一个复选框可以为 Web 服务启用 https。这些设置的值使用 Rob Mensching 的"Remember Property" pattern 存储在 Windows 注册表中。他们使用 WixUtilExtension XmlFile 更新配置文件。第一次安装应用程序就可以了。

当用户再次运行安装程序时(当应用程序已经安装时),他们可以选择通过 MaintenanceTypeDlg 更改功能。用户可以在 CustomizeDlg 中添加或删除功能。然后安装程序向导允许用户更改设置(例如 https 网络服务)。功能更改工作正常,但是当用户更改设置时,它会被忽略(配置文件和注册表项未更新)。大概是因为已经安装了配置文件和注册表项。

在进行功能更改时,如何让安装程序进行设置更改(更新配置文件和注册表项)?或者这不是使用 Windows 安装程序的正确方法吗?

【问题讨论】:

  • 在维护期间创建一个详细的 msi 日志文件,它应该告诉您文件、组件和功能的状态和计划操作。
  • 好主意。日志文件确认在维护安装期间未将注册表值写入注册表(WriteRegistryValues 操作不执行任何操作)。那么是否有可能让安装程序在维护安装期间重写注册表值?

标签: wix windows-installer


【解决方案1】:

XmlFile WixUtilExtension 只会在两种情况下运行。如果正在安装它所属的组件,则 xml 条目将被修改,而当组件被卸载时,该 xml 条目将被删除。

在维护安装期间,不会触及 xml 条目,因为组件很可能具有属性 State: Installed、Request: Local 等 Action: Null。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa367858.aspx

修复方法是“设置重新安装”,如此处所述: http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/use-XmlFile-XmlConfig-in-maintenance-mode-td5520598.html

尝试使用命令行设置属性 REINSTALL=ALL 看看是否有效。
如果是这样,那么我认为如果用户选择执行维护安装,它可以动态设置。

【讨论】:

  • 是的!设置 REINSTALL 和 REINSTALLMODE 属性是关键。谢谢拉米。
  • 我花了一点时间才找到正确的方法(从命令行设置 REINSTALL 意味着 UI 不显示 MaintenanceTypeDlg,因此用户无法选择“更改”)。我最终从 Wix 源中获取了 VerifyReadyDlg 并进行了一些修改。我在更改按钮控件中插入了以下 2 个子元素: 1]]> 1]]>
  • 然后我在 UI 中使用了新版本的 VerifyReadyDlg 而不是原来的。 REINSTALL 属性的“服务器”值是包含注册表项和配置文件的功能的 ID。因此,每当用户选择更改应用程序时,始终会重新安装服务器功能,以确保 UI 对话框中更改的任何新属性值都保存到注册表和配置文件中。
【解决方案2】:

您需要将该属性的值保存在注册表项中,并在维护安装期间调用它。

<Property Id="MyProperty">
  <RegistrySearch
    Id="MyProperty"
    Root="HKLM"
    Key="Software\Manufacturer\Product"
    Name="MyProperty"
    Type="raw" />
</Property>

<Component Id="MyProperty">
  <RegistryValue
    Id="MyProperty"
    Root="HKLM"
    Key="SOFTWARE\Manufacturer\Product"
    Name="MyProperty"
    Type="string"
    Value="[MYPROPERTY]"
    KeyPath="yes" />
</Component>

【讨论】:

  • 我试过这个。运行维护安装时,会从注册表中正确调用“MyProperty”的值。但是,如果您在维护安装期间尝试更改其值,则新值不会写入注册表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
  • 2020-05-09
相关资源
最近更新 更多