如何防止注册表删除作为已安装的MSI卸载的一部分?

时间:2015-04-20 09:42:02

标签: wix windows-installer upgrade msiexec major-upgrade

我们目前正在生产MSI(比如Broker.msi)。作为安装的一部分,MSI(在Wix中定义)创建一个新的注册表项(Broker)并在其下添加2个子项。安装后,当用户注册我们的产品时,还有一个名为" Key3"在" Broker"下添加  节点。请注意" Key3"包含注册密钥,这是非常重要的&由产品的其他层访问。

[安装后的注册表结构&注册

HKLM \ SOFTWARE \微软\经纪人

  • Key1(由安装人员添加)

  • Key2(由安装人员添加)

  • Key3(用户注册产品时添加)

[Wix Code Snippet]



  <Component Id="RegistryEntries" Guid="*" Win64="$(var.WIN64_COMPONENT)">
          <RegistryKey Root="HKLM" Key="Software\Microsoft\Broker"  Action="createAndRemoveOnUninstall">
            <RegistryValue Type="string" Name="Key1" Value="1rp1users" KeyPath="yes"/>
            <RegistryValue Type="string" Name="Key2" Value="http://windowsbackup/m1" />
          </RegistryKey>
    </Component>
....
 <ComponentRef Id="RegistryEntries" />
&#13;
&#13;
&#13;

问题: 到目前为止,由于我们使用的是修补程序,因此我们将面临升级的任何问题。从下一个版本开始,我们希望转向主要升级,但最大的挑战是:在主要升级期间,旧产品将被卸载。根据wix片段,&#34; Broker&#34;的动作元素。注册表元素是 &#34; CreateAndRemoveOnUninstall&#34;所以整个&#34;经纪人&#34;节点将被删除,以及&#34; Key3&#34;子项。

如果我将操作更新为&#34;创建&#34;,问题将通过新安装得到修复,但由于msi已经投入生产,我如何阻止它删除注册表作为现有主要升级的一部分产品?

1 个答案:

答案 0 :(得分:2)

您需要实施Remember Property模式。这将导致新的MSI在主要升级删除旧版本之前检索数据,然后在最后重新应用它。