При удалении моего приложения я хотел бы настроить настройку Wix на НЕТ, чтобы удалить несколько файлов, которые были добавлены как часть установки. Похоже, что программа удаления удаляет все файлы, которые были изначально установлены из файла MSI. Как я могу это сделать?
Вот мои файлы, которые я хочу сохранить навсегда
<Binary Id = "RootCABinary" SourceFile = "Assets\Certificates\RootCA.cer" />
<Binary Id = "SubCABinary" SourceFile = "Assets\Certificates\SubCA.cer" />
Я использовал WixIIsExtension.dll
для установки этих сертификатов в магазин Windows.
Overwrite: Is it important that the file never gets overwritten? If so, add "Never Overwrite" to your component. WiX attribute:
NeverOverwrite = "yes"
. Remember to test upgrade scenarios!
Постоянный компонент: Как сказал Павел, вы можете сделать компонент постоянным:
<Component Permanent = "yes">
<File Source = "License.rtf" />
</Component>
Пустой GUID: Другой способ сделать это — установить blank component GUID
. По сути, это означает "установить и оставить в покое". Не следует выполнять восстановление или удаление (не забудьте добавить NeverOverwrite = "yes"
, если файл никогда не должен быть перезаписан):
<Component Guid = "" Feature = "MainApplication">
<File Source = "SubCA.cer" KeyPath = "yes" />
</Component>
Копия только для чтения: иногда я устанавливаю файлы в per-machine path
(например, где-то в файлах программы), а затем копирую их в per-user location
(где-то в профиле пользователя) при запуске приложения, а затем выполняю над ними операции, которые влекут за собой, что файлы не должны быть удален. Это хорошо в тех случаях, когда вы хотите сделать что-то, что изменяет рассматриваемые файлы (они должны быть доступны для записи). Тогда хорошо «выпутать» их из проблем развертывания (файлы вообще не будут вмешиваться в операции установщика - установщик ничего о них не знает). Оригинальная копия только для чтения, установленная в программных файлах, может быть удалена (больше не нужна?).
Другие подходы: Вы также можете создавать такие файлы, используя настраиваемые действия во время установки (обычно только текстовые файлы), вы можете загрузить соответствующий файл со своего веб-сайта при запуске приложения (облегчает управление файлом и его обновление/замену? Уязвимость к проблемам с подключением - брандмауэры и т. д.), и приложение может создать файл, используя «внутренние значения по умолчанию» в основном исполняемом файле при запуске. И, несомненно, есть дальнейшие подходы, которые я не могу вспомнить.
Да, перезапись будет предотвращена, но не «восстановлена», поскольку файл удаляется, а затем переустанавливается, что делает его перезаписанным? (для ранних крупных обновлений RemoveExistingProducts, когда все файлы удаляются/деинсталлируются перед повторной установкой).
Я не вижу логов события копирования сертификата! Что-нибудь, что я должен явно включить?
«как в файле удаляется, а затем переустанавливается» — MSI не удалит и не перезапишет измененный неверсионный файл. Может быть, я не понимаю, что вы пытаетесь сказать.
Я не видел, чтобы вы определили их как Binary elements
. Вы используете их для добавления в двоичную таблицу для использования в пользовательских действиях и для использования Certificate element
, который странно находится в пространстве имен IIS (я никогда не использовал эту функцию). Попробуйте сделать компонент постоянным. Это должно предотвратить удаление. Вы также можете установить сертификаты как File elements
, но тогда вам потребуется специальное действие для их установки в хранилище (я полагаю).
Другой подход, не требующий специальной разработки WiX: регулярно устанавливайте файл. Позвольте программе изменить дату «Последнего изменения» файла, чтобы она была позже даты «Создания» (что происходит регулярно, если программа действительно изменяет файл). Это работает, потому что одно из правил MSI — никогда не удалять «файлы, измененные пользователем», которые обнаруживаются путем сравнения даты создания и даты модификации. Если они отличаются, предполагается, что файл изменен пользователем. Хотя я думаю, что это работает только для неверсированных файлов.