Как изменить значение ключа реестра при удалении без удаления ключа из реестра в 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= ""[SystemFolder]reg.exe" ADD "HKCU\SOFTWARE\Microsoft\Notepad" /v StatusBar /t integer /d 0 /f" >
</CustomAction>
Установлены
2 ответа
Краткий ответ - создать запись реестра с вашим кодом и изменить ее с вашим кодом, тогда ясно, что вы управляете этими записями, а не вами и настройкой MSI.
Альтернатива - поместить их в компонент отдельно с нулевым указателем компонента, тогда MSI не будет управлять им вообще после установки.
Фил уже ответил, но, возможно, я могу добавить, что вы можете использовать (REMOVE = "ALL" AND NOT UPGRADINGPRODUCTCODE) для настраиваемого действия, которое будет выполнено во время удаления. Затем просто установите постоянный компонент реестра (данные реестра HKCU на самом деле также не должны быть удалены - это вопрос некоторых дискуссий). Это все равно не исправит данные HKCU для пользователей, которые не вошли в систему во время удаления. Это гораздо более сложная задача, которую, вероятно, можно выполнить с помощью ActiveSetup.
Добавление NOT UPGRADINGPRODUCTCODE гарантирует, что деинсталляции, выполненные в рамках основных обновлений, не обновят реестр, так как продукт должен быть переустановлен. Не должно быть необходимым для вашего случая, но гарантирует, что настраиваемое действие не запускается без необходимости.
Я хотел бы предложить планирование пользовательских действий прямо перед InstallFinalize в InstallExecuteSequence. Я не проверял это местоположение, но это одно из последних действий, которое нужно выполнить во время удаления, и оно должно дать желаемый эффект.
См. Списки условий для определения различных режимов установки в нижней части этой темы.