Как изменить значение ключа реестра при удалении без удаления ключа из реестра в wix?

Я добавил значение ключа реестра в реестр при установке. И я хочу изменить это значение ключа реестра при удалении, но я не хочу удалять его из реестра.

1) Я пытался с выполнением пользовательских действий при удалении изменить значение реестра. Но значения реестра удаляются из реестра при удалении.

2) Если я сделаю компонент постоянным, то он не изменяет значение ключа во время удаления.

  <Component Id="SampleRegComp"
       Guid="3865FE52-F8EE-4E29-B321-BDF0FD6D3F58"
             Permanent="yes">
    <RegistryKey Action="create"
      Key="SOFTWARE\Microsoft\Notepad"
      Root="HKCU">
      <RegistryValue Name="StatusBar" Type="integer" Value="1" />
    </RegistryKey>

  </Component>

<CustomAction
Id="ModifyOutlookRegInitSign_12"
Return="ignore"
Directory="TARGETDIR"
ExeCommand= "&quot;[SystemFolder]reg.exe&quot; ADD &quot;HKCU\SOFTWARE\Microsoft\Notepad&quot; /v StatusBar /t integer /d 0 /f" >
</CustomAction>

Установлены

2 ответа

Решение

Краткий ответ - создать запись реестра с вашим кодом и изменить ее с вашим кодом, тогда ясно, что вы управляете этими записями, а не вами и настройкой MSI.

Альтернатива - поместить их в компонент отдельно с нулевым указателем компонента, тогда MSI не будет управлять им вообще после установки.

Фил уже ответил, но, возможно, я могу добавить, что вы можете использовать (REMOVE = "ALL" AND NOT UPGRADINGPRODUCTCODE) для настраиваемого действия, которое будет выполнено во время удаления. Затем просто установите постоянный компонент реестра (данные реестра HKCU на самом деле также не должны быть удалены - это вопрос некоторых дискуссий). Это все равно не исправит данные HKCU для пользователей, которые не вошли в систему во время удаления. Это гораздо более сложная задача, которую, вероятно, можно выполнить с помощью ActiveSetup.

Добавление NOT UPGRADINGPRODUCTCODE гарантирует, что деинсталляции, выполненные в рамках основных обновлений, не обновят реестр, так как продукт должен быть переустановлен. Не должно быть необходимым для вашего случая, но гарантирует, что настраиваемое действие не запускается без необходимости.

Я хотел бы предложить планирование пользовательских действий прямо перед InstallFinalize в InstallExecuteSequence. Я не проверял это местоположение, но это одно из последних действий, которое нужно выполнить во время удаления, и оно должно дать желаемый эффект.

См. Списки условий для определения различных режимов установки в нижней части этой темы.

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