Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 使用wix恢复到以前的注册表值_Windows_Wix_Wix3.5_Wix3.7_Wix3.6 - Fatal编程技术网

Windows 使用wix恢复到以前的注册表值

Windows 使用wix恢复到以前的注册表值,windows,wix,wix3.5,wix3.7,wix3.6,Windows,Wix,Wix3.5,Wix3.7,Wix3.6,我有一个简单的wix应用程序,可以修改现有的注册表值。 卸载期间,注册表应设置为上一个/原始值。 因此,我将这些现有值存储到一个临时注册表中 我可以将这些临时注册表值读取到属性中,但如何在卸载期间将此属性设置为注册表 这是我的属性,它将从临时注册表读取原始值: <Property Id="TEMPVALUE" Secure="yes"> <RegistrySearch Id="FindExistingMySetting" Root="HK

我有一个简单的wix应用程序,可以修改现有的注册表值。 卸载期间,注册表应设置为上一个/原始值。 因此,我将这些现有值存储到一个临时注册表中

我可以将这些临时注册表值读取到属性中,但如何在卸载期间将此属性设置为注册表

这是我的属性,它将从临时注册表读取原始值:

<Property Id="TEMPVALUE" Secure="yes">
  <RegistrySearch Id="FindExistingMySetting"
                  Root="HKLM"
                  Key="Software\SampleApp"
                  Name="TempSampleKey"
                  Type="raw"/>
</Property>


那么,在卸载过程中,我应该如何使用这个“TEMPVALUE”属性来设置注册表呢。我认为可能需要某种定制的操作。我对这个概念还不熟悉,所以一个示例将非常有用。

我通过使用自定义操作来实现这一点。我认为这是不可能的,因为没有办法在卸载时安装组件(据我所知)

例如,我有一个名为“SaveOriginalRegistryValue”的自定义操作来保存原始值,其中注册表项名称的末尾附加了“_original”

然后我看到另一个名为“RestoreOriginalRegistryValue”的自定义操作,它将原始键放回,然后从注册表中删除“_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>

未升级ProductCode且未删除~=“全部”且未检测到WIX\u升级
不升级ProductCode并删除~=“全部”
因此,当这是第一次安装产品而不是升级时,保存自定义操作将被取消

只有在完全删除产品时,恢复自定义操作才会运行,而在升级时删除旧版本时,则不会运行