我们目前正在生产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;
问题: 到目前为止,由于我们使用的是修补程序,因此我们将面临升级的任何问题。从下一个版本开始,我们希望转向主要升级,但最大的挑战是:在主要升级期间,旧产品将被卸载。根据wix片段,&#34; Broker&#34;的动作元素。注册表元素是 &#34; CreateAndRemoveOnUninstall&#34;所以整个&#34;经纪人&#34;节点将被删除,以及&#34; Key3&#34;子项。
如果我将操作更新为&#34;创建&#34;,问题将通过新安装得到修复,但由于msi已经投入生产,我如何阻止它删除注册表作为现有主要升级的一部分产品?