使用Wix安装程序更改功能时更新属性值

时间:2012-01-04 06:08:19

标签: wix windows-installer

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

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

修复是“设置REINSTALL”,如下所述: http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/use-XmlFile-XmlConfig-in-maintenance-mode-td5520598.html

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

答案 1 :(得分:0)

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

<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>