С помощью wix вернуться к предыдущему значению реестра
У меня есть простое приложение wix, которое изменяет существующее значение реестра. Во время удаления реестра необходимо установить предыдущее / исходное значение. Поэтому я храню эти существующие значения во временном реестре.
Я могу прочитать это временное значение реестра в свойство, но как мне установить это свойство в реестр во время удаления?
Это моя собственность, которая будет читать исходные значения из временного реестра:
<Property Id="TEMPVALUE" Secure="yes">
<RegistrySearch Id="FindExistingMySetting"
Root="HKLM"
Key="Software\SampleApp"
Name="TempSampleKey"
Type="raw"/>
</Property>
Итак, как мне использовать это свойство "TEMPVALUE" для установки реестра во время удаления. Я думаю, что может потребоваться какое-то специальное действие. Я новичок в этой концепции, поэтому образец будет очень полезным.
1 ответ
Я сделал это с помощью пользовательского действия. Я не думаю, что это возможно иначе, так как нет возможности установить компоненты при деинсталляции (о чем я знаю).
В качестве примера у меня есть настраиваемое действие под названием "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>
Таким образом, пользовательские действия по сохранению будут выполняться, когда продукт устанавливается впервые, а не при обновлении.
Восстановление настраиваемого действия будет выполняться только при полном удалении продукта, а не при удалении более старой версии при обновлении.