2017-04-11 10 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を定義します。

レジストリから抽出された値で最初のプロパティの値を(条件付きで)アップグレードするには、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