我们目前正在生产MSI(例如Broker.msi)。作为安装的一部分,MSI(在Wix中定义)将创建一个新的注册表项(代理),并在其下添加2个子项。安装后,当用户注册我们的产品时,在“代理”节点下又添加了一个名为“ Key3”的注册表项。请注意,“ Key3”包含非常重要的注册密钥,并且该注册密钥可被产品的其他层访问。
[注册结构安装和注册后]
HKLM \软件\ Microsoft \代理
Key1(由安装程序添加)
Key2(由安装程序添加)
Key3(在用户注册产品时添加)
[Wix代码段]
<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" />
问题:到目前为止,自从我们使用补丁程序以来,我们就面临升级的任何问题。从下一个版本开始,我们希望进行重大升级,但是最大的挑战是:在重大升级期间,旧产品将被卸载。按照wix片段,“代理”注册表元素的action元素是“ CreateAndRemoveOnUninstall”,因此整个“代理”节点以及“ Key3”子项都将被删除。
如果我将操作更新为“创建”,则新安装的问题将得到解决,但是由于msi已经投入生产,如何防止其删除注册表作为现有产品重大升级的一部分?
您需要实现“记住属性”模式。这将导致新的MSI在主要升级删除旧版本之前检索数据,然后在最后重新应用它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句