2012-01-04 36 views
3

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

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

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

+0

在维护期间创建详细的msi日志文件,它应该告诉您文件,组件和功能的状态和计划的操作。 – 2012-01-09 12:33:26

+0

好主意。日志文件确认在维护安装期间注册表值不会写入注册表(WriteRegistryValues操作不执行任何操作)。那么是否有可能让安装程序在维护安装期间重写注册表值? – Smiffy 2012-01-10 00:37:18

回答

4

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

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

+0

是的!设置REINSTALL和REINSTALLMODE属性是关键。谢谢拉米。 – Smiffy 2012-01-13 01:23:04

+1

我花了一点时间才找到正确的方法(从命令行设置REINSTALL意味着UI不显示MaintenanceTypeDlg,因此用户不能选择“更改”)。我最终从Wix源获取了VerifyReadyDlg并进行了一些修改。我在更改按钮控件中插入了以下两个子元素: <![CDATA [OutOfDiskSpace <> 1]]> <![CDATA [OutOfDiskSpace <> 1]]> Smiffy 2012-01-13 01:45:22

+0

然后,我在UI中使用了新版本的VerifyReadyDlg,而不是原始版本。 REINSTALL属性的“Server”值是包含注册表项和配置文件的功能的ID。因此,无论用户何时选择更改应用程序,都会重新安装服务器功能,确保在UI对话框中更改的任何新属性值都会保存到注册表和配置文件中。 – Smiffy 2012-01-13 01:45:49

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

我试过这个。运行维护安装时,从注册表中正确调用“MyProperty”的值。但是,如果您在维护安装期间尝试更改其值,则新值不会写入注册表。 – Smiffy 2012-01-09 02:23:30

相关问题