Re: [WiX] удалить файл по условию
От: baily Россия  
Дата: 27.04.11 10:53
Оценка: 4 (1)
Здравствуйте, yeti, Вы писали:

Y>При удалении приложения нужен чекбокс "удалить настройки" (файлы, изначально инсталлятором не ставятся).

Y>Насколько я понял, CustomAction, удаляющее файл вызовом del, несовместимо с откатом удаления, а <RemoveFile /> etc жёстко привязан к компоненту, и завязать его на чекбокс при удалении нельзя?
Y>Так как сделать правильно?

Завести три CustomAction: PrepareDeleteSettingsCA — обычного типа, DeleteSettingsCA — deferred, RollbackDeleteSettingsCA -rollback.

Добавить PrepareDeleteSettingsCA в InstallExecuteSequence с условием, что вызывается оно при удалении.

<Custom Action="PrepareDeleteSettingsCA" Before="RemoveFiles"><![CDATA[$(var.Uninstall)]]></Custom>


Идти оно должно до RemoveFiles, так как последнее сначала удаляет файлы, поставленные инсталлятором, а потом удаляет папки, созданные инсталлятором.
Но папки будут удалены только в том случае, если в них не останется никаких файлов. Значит, твои файлы настроек должны быть уже удалены к этому времени.



в следующем порядке: PrepareDeleteSettingsCA, RollbackDeleteSettingsCA, DeleteSettingsCA
( В принципе, добавить можно только PrepareDeleteSettingsCA, а два других вызвать из него же. Но rollback должно идти раньше ).

PrepareDeleteSettingsCA прикапывает во временную папку TempBackupFolder файлы настроек.
После этого вызывает RollbackDeleteSettingsCA и DeleteSettingsCA ( именно в таком порядке !!! ). В RollbackDeleteSettingsCA надо передать TempBackupFolder черезCA_DATA.
DeleteSettingsCA удаляет файлы настроек.

RollbackDeleteSettingsCA — восстанавливает их из TempBackupFolder. При этом саму TempBackupFolder удаляет.

Все!!!

Для успокоения совести можно еще в конце удалить папку TempBackupFolder.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.