Обновление значения свойства при изменении функций с помощью установщика Wix - PullRequest
3 голосов
/ 04 января 2012

У меня есть установщик, созданный в Wix. Пользовательский интерфейс установщика позволяет пользователю выбрать некоторые настройки. Например, есть флажок, чтобы включить https для веб-служб. Значения этих настроек хранятся в реестре Windows, используя шаблон «Помни свойство» Роба Меншинга . Они обновляют конфигурационные файлы, используя WixUtilExtension XmlFile. Установка приложения в первый раз работает нормально.

Когда пользователь снова запускает установщик (когда приложение уже установлено), ему предоставляется возможность изменения функций через MaintenanceTypeDlg. Пользователь может добавлять или удалять функции в CustomizeDlg. Затем мастер установки позволяет пользователю изменять настройки (например, веб-службы https). Изменения функций работают нормально, но когда пользователь изменяет параметр, он игнорируется (файл конфигурации и раздел реестра не обновляются). Предположительно, потому что файл конфигурации и раздел реестра уже установлены.

Как заставить установщик вносить изменения в настройки (обновлять файлы конфигурации и ключи реестра) при внесении изменений в функции? Или это не правильно делать с установщиком Windows?

Ответы [ 2 ]

4 голосов
/ 11 января 2012

XmlFile WixUtilExtension будет работать только в двух сценариях. Если компонент, к которому он принадлежит, устанавливается, запись xml будет изменена, а при удалении компонента xml запись будет удалена.

Во время установки обслуживания запись xml не затрагивается, поскольку компонент, скорее всего, имеет свойства Состояние: Установлено, Запрос: Локальный и т. Д. Действие: Нуль.

http://msdn.microsoft.com/en-us/library/windows/desktop/aa367858.aspx

Исправлено «установить REINSTALL», как упомянуто здесь: http://windows -installer-xml-wix-toolset.687559.n2.nabble.com / потребительная XMLFILE-XmlConfig-в-обслуживании режима-td5520598.html

Попробуйте установить свойство REINSTALL = ALL с помощью командной строки, чтобы проверить, работает ли оно.
Если так, то я думаю, что он может быть установлен динамически, если пользователь решит выполнить установку для обслуживания.

0 голосов
/ 09 января 2012

Вам нужно сохранить значение свойства в разделе реестра и вызвать его во время установки для обслуживания.

<Property Id="MyProperty">
  <RegistrySearch
    Id="MyProperty"
    Root="HKLM"
    Key="Software\Manufacturer\Product"
    Name="MyProperty"
    Type="raw" />
</Property>

<Component Id="MyProperty">
  <RegistryValue
    Id="MyProperty"
    Root="HKLM"
    Key="SOFTWARE\Manufacturer\Product"
    Name="MyProperty"
    Type="string"
    Value="[MYPROPERTY]"
    KeyPath="yes" />
</Component>
...