我在Wix中创作了一个安装程序。安装程序UI允许用户选择一些设置。例如,有一个复选框可以为Web服务启用https。使用Rob Mensching的"Remember Property" pattern将这些设置的值存储在Windows注册表中。他们使用WixUtilExtension XmlFile更新配置文件。第一次安装应用程序正常。
当用户再次运行安装程序时(已安装应用程序),他们可以选择通过MaintenanceTypeDlg更改功能。用户可以在CustomizeDlg中添加或删除功能。然后,安装程序向导允许用户更改设置(例如https Web服务)。功能更改工作正常,但是当用户更改设置时,它将被忽略(配置文件和注册表项不会更新)。可能是因为已经安装了配置文件和注册表项。
如何在进行功能更改时让安装程序进行设置更改(更新配置文件和注册表项)?或者这不适合使用Windows安装程序吗?
答案 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>