Как остановить удаление файлов во время удаления с помощью Wix

При удалении моего приложения я хотел бы настроить настройку Wix на НЕТ, чтобы удалить несколько файлов, которые были добавлены как часть установки. Похоже, что программа удаления удаляет все файлы, которые были изначально установлены из файла MSI. Как я могу это сделать?

Вот мои файлы, которые я хочу сохранить навсегда

<Binary Id = "RootCABinary" SourceFile = "Assets\Certificates\RootCA.cer" />
<Binary Id = "SubCABinary" SourceFile = "Assets\Certificates\SubCA.cer" />

Я использовал WixIIsExtension.dll для установки этих сертификатов в магазин Windows.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
256
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Поместите свои бинарники в отдельный WiX компонент и сделайте его постоянным. Взгляните также на этот нить

Ответ принят как подходящий

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 (где-то в профиле пользователя) при запуске приложения, а затем выполняю над ними операции, которые влекут за собой, что файлы не должны быть удален. Это хорошо в тех случаях, когда вы хотите сделать что-то, что изменяет рассматриваемые файлы (они должны быть доступны для записи). Тогда хорошо «выпутать» их из проблем развертывания (файлы вообще не будут вмешиваться в операции установщика - установщик ничего о них не знает). Оригинальная копия только для чтения, установленная в программных файлах, может быть удалена (больше не нужна?).


Другие подходы: Вы также можете создавать такие файлы, используя настраиваемые действия во время установки (обычно только текстовые файлы), вы можете загрузить соответствующий файл со своего веб-сайта при запуске приложения (облегчает управление файлом и его обновление/замену? Уязвимость к проблемам с подключением - брандмауэры и т. д.), и приложение может создать файл, используя «внутренние значения по умолчанию» в основном исполняемом файле при запуске. И, несомненно, есть дальнейшие подходы, которые я не могу вспомнить.

Другой подход, не требующий специальной разработки WiX: регулярно устанавливайте файл. Позвольте программе изменить дату «Последнего изменения» файла, чтобы она была позже даты «Создания» (что происходит регулярно, если программа действительно изменяет файл). Это работает, потому что одно из правил MSI — никогда не удалять «файлы, измененные пользователем», которые обнаруживаются путем сравнения даты создания и даты модификации. Если они отличаются, предполагается, что файл изменен пользователем. Хотя я думаю, что это работает только для неверсированных файлов.

zett42 08.04.2019 13:30

Да, перезапись будет предотвращена, но не «восстановлена», поскольку файл удаляется, а затем переустанавливается, что делает его перезаписанным? (для ранних крупных обновлений RemoveExistingProducts, когда все файлы удаляются/деинсталлируются перед повторной установкой).

Stein Åsmul 08.04.2019 14:09

Я не вижу логов события копирования сертификата! Что-нибудь, что я должен явно включить?

kudlatiger 09.04.2019 06:45

«как в файле удаляется, а затем переустанавливается» — MSI не удалит и не перезапишет измененный неверсионный файл. Может быть, я не понимаю, что вы пытаетесь сказать.

zett42 09.04.2019 11:20

Я не видел, чтобы вы определили их как Binary elements. Вы используете их для добавления в двоичную таблицу для использования в пользовательских действиях и для использования Certificate element, который странно находится в пространстве имен IIS (я никогда не использовал эту функцию). Попробуйте сделать компонент постоянным. Это должно предотвратить удаление. Вы также можете установить сертификаты как File elements, но тогда вам потребуется специальное действие для их установки в хранилище (я полагаю).

Stein Åsmul 09.04.2019 12:15

Другие вопросы по теме