С помощью 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>

Таким образом, пользовательские действия по сохранению будут выполняться, когда продукт устанавливается впервые, а не при обновлении.

Восстановление настраиваемого действия будет выполняться только при полном удалении продукта, а не при удалении более старой версии при обновлении.

Другие вопросы по тегам