Как удалить модификацию XML в режиме изменения (WiX 3.5)

Я создал установщик WiX 3.5 с множеством функций. Одна функция выполняет некоторые изменения XML, и она отлично работает. Я прочитал, что эти изменения можно отменить при удалении приложения, используя постоянный атрибут.

Теперь представьте себе следующий случай: пользователь устанавливает все приложение. Функция 1 вносит некоторые изменения в XML. Теперь пользователь перезапускает MSI в режиме обслуживания, чтобы удалить функцию 1. При удалении функции 1 изменения XML также должны быть удалены, но это не так.

Итак, как я могу убедить свой MSI удалить изменения XML таким образом?


person Marcus    schedule 10.09.2010    source источник


Ответы (1)


Это может быть так, если на компонент, содержащий элемент xml: config, есть ссылка из любой другой функции. Убедитесь, что только эта функция 1 ссылается на компонент. Это всего лишь предположение - никогда не пробовал.

Надеюсь это поможет.

person Yan Sklyarenko    schedule 10.09.2010
comment
Фактически функция 2 устанавливает файл XML, а функция 1 вносит некоторые изменения в этот файл ... Так вы думаете, что изменения XML не удаляются, поскольку они вносятся в файл, созданный другой функцией? - person Marcus; 10.09.2010
comment
Я так понимаю, что изменения XML находятся в отдельном компоненте, верно? Какой KeyPath у этого компонента? Есть ли на него ссылки из любого другого компонента, который не удаляется при удалении функции 1? - person Yan Sklyarenko; 10.09.2010
comment
Короче говоря, поведение расширения XML (как и других стандартных расширений WiX) привязано к компоненту, в котором находится элемент, и его KeyPath. - person Yan Sklyarenko; 10.09.2010
comment
Подводя итог: невозможно удалить изменения XML, когда сам файл XML помещен в другую функцию (поскольку он, следовательно, находится в другом компоненте). - person Marcus; 13.09.2010
comment
На самом деле я не это имел в виду. Функции могут ссылаться на один и тот же компонент. Если ваша функция 1 и функция 2 ссылаются на компонент с помощью File и XmlConfig, то изменения XML не будут удалены, если вы удалите одну из функций. ЕСЛИ вместо этого вы помещаете элемент File, помеченный как KeyPath, в один компонент и ссылаетесь на него в Feature 1, И помещаете элемент XmlConfig и, например, Элемент RegistryKey, помеченный как KeyPath, в другой компонент и ссылается на него в Feature 2, ТО, когда вы удаляете Feature 2, он должен удалить изменения XML, оставив сам файл на целевой машине. - person Yan Sklyarenko; 13.09.2010
comment
Звучит интересно ... Я попробую позже на этой неделе и сообщу о результате;) - person Marcus; 13.09.2010
comment
Я пробовал этот способ, но он не работает. После удаления функции 2 XML-файл остается нетронутым, хотя компонент XMLChanges принадлежит к функции 2. Теперь я установил некоторые условия, которые позволят устанавливать / удалять функции только в сотрудничестве с зависимыми функциями. - person Marcus; 17.09.2010