2017-04-11 42 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