2017-04-11 78 views
0

我有一个基于wix的安装程序(MSI),并希望在更新我的应用程序时保护用户设置,这些设置存储在HKCU下的注册表中。WiX - 在升级应用程序时保护注册表值

现在,当我升级我的应用程序时,每个注册表值都将被覆盖,以便用户必须重新设置其设置。

我还想在卸载整个应用程序时删除所有设置。

任何人都可以帮忙吗?

我的代码如下所示:

<Component Id="REGISTRY_ReConnect" Guid="$(var.GUID_REGISTRY_ReConnect)"> 
    <RegistryValue Id="_REGISTRY_ReConnect" Root="HKCU" Key="Software\exampleX\MBCA" Name="ReConnect" Value="1" Type="integer" KeyPath="yes" /> 
</Component> 

回答

1

对于每一个在注册表中的设置执行以下操作:

定义包含设置的默认值的属性。

定义一个RegistrySearch,它将从注册表中提取设置值并将其放入另一个Property中。

使用SetProperty(有条件地)使用从注册表中提取的值升级第一个属性的值。

在Component/RegistryValue/@ Value中,使用第一个属性的值而不是显式值。

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
<Product Id="*" Name="MyProduct" Language="1033" Version="1.1.0.0" Manufacturer="MyCompany" UpgradeCode="81a34cee-f0da-4135-9f37-53e02e4b450a"> 
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perUser" /> 

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> 
    <Media Id="1" /> 

    <Feature Id="ProductFeature" Title="MyProduct1" Level="1"> 
     <ComponentGroupRef Id="ProductComponents" /> 
    </Feature> 
</Product> 

<Fragment> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="ProgramFilesFolde"> 
      <Directory Id="INSTALLFOLDER" Name="MyProduct" /> 
     </Directory> 
    </Directory> 
</Fragment> 

<Fragment> 
    <Property Id="ReConnect" Value="1" /> 
    <Property Id="OLDRECONNECT"> 
     <RegistrySearch Id="ReConnectSearch" Root="HKCU" Key="Software\exampleX\MBCA" Name="ReConnect" Type="raw" /> 
    </Property> 
    <SetProperty Id="ReConnect" Value="[OLDRECONNECT]" After="AppSearch">OLDRECONNECT</SetProperty> 

    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER"> 
     <Component Id="REGISTRY_ReConnect"> 
      <RegistryValue Id="_REGISTRY_ReConnect" Root="HKCU" Key="Software\exampleX\MBCA" Name="ReConnect" Value="[ReConnect]" Type="integer" KeyPath="yes" /> 
     </Component> 
    </ComponentGroup> 
</Fragment> 
</Wix> 
+0

当安装程序必须写入HKEY_CURRENT_USER时,这也适用? – creg

+0

@creg是的,为什么不呢?请参阅http://robmensching.com/blog/posts/2010/5/2/the-wix-toolsets-remember-property-pattern/以供参考 – dvorn

+0

@creg它只适用于HKCU,如果与第一个用户相同的用户安装,也会进行升级安装。这就是为什么让安装者读取或写入HKCU通常不是一个好主意。 – zett42