我有一个简单的WIX应用程序,可修改现有注册表值。在卸载期间,应将注册表设置为以前的/原始值。因此,我将这些现有值存储到临时注册表中。
我可以将这些临时注册表值读为属性,但是如何在卸载过程中将此属性设置为注册表?
这是我的属性,它将从临时注册表中读取原始值:
<Property Id="TEMPVALUE" Secure="yes">
<RegistrySearch Id="FindExistingMySetting"
Root="HKLM"
Key="SoftwareSampleApp"
Name="TempSampleKey"
Type="raw"/>
</Property>
因此,我应该如何使用此" tempvalue"属性在卸载期间设置注册表。我认为可能需要采取某种自定义行动。我是这个概念的新手,所以样本真的很有帮助。
我通过使用自定义操作来做到这一点。我认为否则不可能,因为没有办法在卸载上安装组件(我知道(。
作为一个示例,我有一个称为" saveoriginalRegistrue"的自定义操作,可以保存原始值,其中注册表密钥名称附加到其名称的末尾。
然后i另一个称为" RestoreOriginalRegistrue"的自定义操作将原始密钥放回,然后从注册表中删除" _original"键。
在Wix安装程序定义中我有
<CustomAction Id="CA_SaveOriginalRegistrySettings" BinaryKey="ClientCustomActionsDLL" DllEntry="SaveOriginalRegistrySettings" Execute="deferred" />
<CustomAction Id="CA_RestoreOriginalRegistrySettings" BinaryKey="ClientCustomActionsDLL" DllEntry="RestoreOriginalRegistrySettings" Execute="deferred" />
<InstallExecuteSequence>
<Custom Action="CA_SaveOriginalRegistrySettings" After="WriteRegistryValues">NOT UPGRADINGPRODUCTCODE AND NOT REMOVE~="ALL" AND NOT WIX_UPGRADE_DETECTED</Custom>
<Custom Action="CA_RestoreOriginalRegistrySettings" After="RemoveRegistryValues">NOT UPGRADINGPRODUCTCODE AND REMOVE~="ALL"</Custom>
</InstallExecuteSequence>
因此,保存自定义操作将是第一次安装产品而不是升级时。
还原自定义操作只有在完全删除产品时,而不是在升级时删除较旧版本时进行。