2017-04-11 5 views
0

J'ai une configuration basée sur wix (MSI) et je veux protéger les paramètres utilisateur, qui sont stockés dans le registre sous HKCU, lors de la mise à jour de mon application. Pour l'instant, lorsque je mettrai à jour mon application, chaque valeur de registre sera remplacée, de sorte que l'utilisateur doit redéfinir ses paramètres.WiX - protéger la valeur de registre lors de la mise à niveau d'une application

Je veux également supprimer tous les paramètres, lors de la désinstallation de l'ensemble de l'application.

Quelqu'un peut-il aider?

Mon code ressemble à ceci:

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

Répondre

1

Pour chacun des paramètres de Registre, procédez comme suit:

définir une propriété contenant la valeur par défaut du paramètre.

Définissez une RegistrySearch qui extraira une valeur du paramètre du registre et le placera dans une autre propriété.

Utilisez SetProperty pour mettre à niveau (conditionnellement) la valeur de la première propriété avec la valeur extraite du registre.

Dans votre Component/RegistryValue/@ Value, utilisez la valeur de la première propriété au lieu de la valeur explicite.

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

Cela fonctionne également lorsque le programme d'installation doit écrire dans HKEY_CURRENT_USER? – creg

+0

@creg Oui, pourquoi pas? Voir http://robmensching.com/blog/posts/2010/5/2/the-wix-toolsets-remember-property-pattern/ pour référence – dvorn

+0

@creg Cela ne fonctionnera que pour HKCU si le même utilisateur qui a fait le premier installer, fait également l'installation de mise à niveau. C'est pourquoi ce n'est généralement pas une bonne idée de laisser l'installateur lire ou écrire HKCU. – zett42