Отключить автоматический откат InstallFiles
Я установил свой первый MSI-установщик с WIX-Toolset 3.6
который включает в себя пользовательские действия для Backup
, Installation
а также Rollback
,
Резервное копирование и установка работают нормально, но у меня проблема с моим откатом. Я определил свои пользовательские действия следующим образом:
<!-- Custom actions -->
<CustomAction Id="CA_Install" Return="check" BinaryKey="BIN_CaLibrary" Execute="deferred" DllEntry="CaInstall" />
<CustomAction Id="CA_Rollback" Return="check" BinaryKey="BIN_CaLibrary" Execute="rollback" DllEntry="CaRollback" />
<CustomAction Id="CA_Backup" Return="check" BinaryKey="BIN_CaLibrary" Execute="immediate" DllEntry="CaBackup" />
<CustomAction Id="CA_SetTargetDir" Return="check" BinaryKey="BIN_CaLibrary" Execute="immediate" DllEntry="CaSetTargetDir" />
<CustomAction Id="CA_SetTargetDirAndInstallTypeForInstall" Return="check" Property="CA_Install" Value="InstallType=[INSTALLTYPE];TargetDir=[TARGETDIR]" />
<CustomAction Id="CA_SetTargetDirForRollback" Return="check" Property="CA_Rollback" Value="TargetDir=[TARGETDIR]" />
<!-- Linking custom actions to the install sequence -->
<InstallExecuteSequence>
<Custom Action="CA_SetTargetDir" Before="AppSearch" />
<Custom Action="CA_Backup" After="CA_SetTargetDir" />
<Custom Action="CA_SetTargetDirForRollback" Before="CA_Rollback" />
<Custom Action="CA_SetTargetDirAndInstallTypeForInstall" Before="CA_Install"/>
<Custom Action="CA_Rollback" Before="CA_Install"/>
<Custom Action="CA_Install" Before="InstallFinalize" />
</InstallExecuteSequence>
В моем CA_Backup
Я всегда создаю Backup-Directory со старой версией приложения (даже если установка прошла успешно). Когда мой CA_Install
возникает исключение: установщик переходит к моему собственному действию отката CA_Rollback
, В этом пользовательском действии я удаляю все файлы в TARGETDIR
и воспроизвести файлы из Backup-Directory. Он делает именно то, что должен делать, но после CA_Rollback
Wix-Installer автоматически откатит другие пользовательские действия, такие как InstallFiles
, И поэтому он удаляет все файлы, которые воспроизводятся из Backup-Directory в моем CA_Rollback
до.
Можно ли отключить автоматический откат InstallFiles
Custom Action? Или есть другое решение для моей проблемы?
Также странно, что ProgressText CA_Rollback - это не то, что я определил, а стандартный текст WiX-Framework.
<ProgressText Action="CA_SetTargetDir">Getting Installation-Type...</ProgressText>
<ProgressText Action="CA_Backup">Creating Backup-Directory...</ProgressText>
<ProgressText Action="CA_Install">Updating Application...</ProgressText>
<ProgressText Action="CA_Rollback">Rollback the Application...</ProgressText>
Таким образом, когда установщик переходит к CA_Rollback, ProgressText НЕ является "Откатить приложение...", но в других пользовательских действиях (CA_SetTargetDir, CA_Backup, CA_Install) ProgressText показывается как определено.
РЕДАКТИРОВАТЬ:
Я нашел действие DisableRollback, и я хотел бы использовать его в моем InstallExecuteSequence
:
<DisableRollback After="CA_Rollback" />
Так что я хотел бы запустить свой собственный откат CA_Rollback
, но хотите отключить автоматический откат других пользовательских действий. Но когда я включаю это, отката нет вообще.
1 ответ
Ваш вопрос немного неясен для меня - я совершенно сбит с толку относительно того, что вы действительно спрашиваете, и почему вы реализовали откат таким образом. Тем не менее, вот общий ответ:
Поддержка отката является встроенной функцией установщика Windows, и вам вообще не нужно реализовывать эту функцию. Вам может понадобиться откатное пользовательское действие для дополнения пользовательского действия, которое вносит изменения в целевую систему. Смотрите информацию ниже.
Файлы, замененные во время установки программного обеспечения, а также ключи реестра, параметры ini-файлов и другие параметры, правильно определенные в таблицах MSI, хранятся в скрытой папке непосредственно на системном диске (обычно это C: \ Config.MSI). во время установки. Файлы имеют расширения .RBS и .RBF - Rollback Script Files - которые восстанавливают систему до прежнего состояния в случае возникновения ошибки во время установки, запрещая любые изменения, сделанные в пользовательских действиях.
Пользовательские действия являются особенными в том смысле, что они по определению являются нестандартными, и, следовательно, нет встроенной поддержки для их отката. Чтобы откатить изменения для них, вам нужно написать дополнительное настраиваемое действие отката, чтобы отменить то, что делал оригинальное настраиваемое действие. Это может быть очень сложным и требует тщательного планирования, реализации и тестирования. Обратите внимание, что настраиваемое действие только для чтения, которое выполняет проверку, поиск свойств или другие задачи без внесения каких-либо системных изменений , не требует отката. Использование этих неинвазивных пользовательских действий может быть очень эффективным. Мне особенно нравится использовать эти настраиваемые действия для объединения множества операций в одном скрипте для облегчения проверки другими разработчиками установки. Поведение MSI во время выполнения похоже на сложные часы - возможно множество взаимодействий и проблем с синхронизацией, что затрудняет получение быстрого обзора. Изменения могут потребоваться в 2-3 разных, казалось бы, не связанных местах, чтобы получить поведение, которое вам нужно. Сценарии являются последовательными и могут быть прокомментированы для более легкого понимания и решительно изменены в одном месте. Для командной работы я считаю эти сценарии необходимыми.
Крайне важно указать, что пользовательские действия, как правило, не нужны, поскольку та же функция была реализована уже гораздо более надежными способами с использованием встроенных функций установщика Windows или функций WIX. Wix - это основанный на XML инструментарий, позволяющий компилировать файлы MSI из исходных файлов XML. Этот инструментарий написан Робом Меншингом (Rob Mensching), который в какой-то момент является членом команды установщика Windows из Microsoft, и является очень надежным, легко настраиваемым, а также полным набором расширенных и простых функций.
Важность избегания ненужных пользовательских действий, если это вообще возможно, невозможно переоценить. Проверьте, поддерживает ли Windows Installer или Wix его поддержку.
MSI обладает полной поддержкой обработки параметров файла INI, шрифтов, переменных среды, разделов реестра, информации COM, ярлыков, расширений файлов, условий запуска, установки GAC, ODBC и т. Д.
WIX идет дальше с поддержкой очень продвинутых функций, таких как расширения SQL-сервера, установка и настройка IIS, счетчики производительности, проверка DirectX и другие задачи, связанные с игрой, генерация собственных образов.NET, COM+, драйверы, правила брандмауэра, расширения PowerShell, закрытие приложений, управление пользователями, группами, акциями и многое другое. Несколько сложнее, но гораздо надежнее, чем ваши собственные действия. Загрузите последнюю версию WIX и прочитайте файл справки Wix.chm - раздел "Ссылки на схему Wix".