Отключить автоматический откат 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 автоматически откатывает другие настраиваемые действия, такие как InstallFiles. И поэтому он удаляет все файлы, которые воспроизводятся из Backup-Directory в моем CA_Rollback ранее.

Можно ли отключить автоматический откат пользовательского действия InstallFiles? Или есть другое решение моей проблемы?

Также странно, что 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 отображается, как определено.

EDIT:
Я нашел Действие DisableRollback, и я хотел бы использовать его следующим образом в своем InstallExecuteSequence:

<DisableRollback After="CA_Rollback" />

Поэтому я хотел бы запустить свой собственный откат CA_Rollback, но хочу отключить автоматический откат других настраиваемых действий. Но когда включаю это, отката нет вообще.


person Tobias    schedule 21.05.2014    source источник
comment
Мне до сих пор непонятно, зачем нужен такой откат? Вы пытаетесь сохранить файлы, измененные после установки?   -  person Stein Åsmul    schedule 22.05.2014


Ответы (1)


Ваш вопрос мне немного неясен - я совершенно не понимаю, что вы на самом деле спрашиваете, и почему вы реализовали откат таким образом. Однако вот общий ответ:

Поддержка отката — это встроенная функция установщика Windows, и вам вообще не нужно реализовывать эту функцию. Что вам может понадобиться, так это пользовательское действие отката, дополняющее пользовательское действие, которое вносит изменения в целевую систему. См. информацию ниже.

Файлы, заменяемые во время установки вашего программного обеспечения, а также ключи реестра, параметры файла ini и другие параметры, правильно определенные в таблицах MSI, хранятся в скрытой папке непосредственно на системном диске (обычно C:\Config .MSI) во время установки. Файлы имеют расширения .RBS и .RBFфайлы сценариев отката — которые восстанавливают систему до предыдущего состояния в случае возникновения ошибки во время установки, запрет любых изменений, сделанных в пользовательских действиях.

Пользовательские действия являются особыми в том смысле, что они по определению нестандартны, и, следовательно, нет встроенной поддержки их отката. Чтобы отменить изменения для них, вам нужно написать дополнительное настраиваемое действие отката, чтобы отменить то, что было сделано исходным настраиваемым действием. Это может быть очень сложным и требует тщательного планирования, реализации и тестирования. Обратите внимание, что настраиваемое действие только для чтения, которое выполняет проверку, извлечение свойств или другие задачи без внесения каких-либо изменений в систему, не требует отката. Использование этих неинвазивных пользовательских действий может быть очень эффективным. Мне особенно нравится использовать эти настраиваемые действия для объединения множества операций в один сценарий для облегчения проверки другими разработчиками установки. Поведение MSI во время выполнения похоже на сложные часы — возможны многие взаимодействия и проблемы со временем, что затрудняет быстрый обзор. Изменения могут потребоваться в 2-3 разных, казалось бы, не связанных между собой местах, чтобы получить нужное вам поведение. Скрипты являются последовательными и могут быть прокомментированы для облегчения понимания и кардинально изменены в одном месте. Для командной работы я считаю эти сценарии незаменимыми.

Крайне важно отметить, что настраиваемые действия, как правило, не нужны, поскольку одна и та же функция уже реализована гораздо более надежными способами с использованием встроенных функций установщика Windows или функций WIX. Wix - это набор инструментов на основе XML, позволяющий компилировать файлы MSI из XML исходные файлы. Инструментарий написан Робом Меншингом (Rob Mensching), который когда-то был членом команды установщиков Windows из Microsoft, и является очень надежным, легко настраиваемым и полным как сложных, так и простых функций.

Важность по возможности избегать ненужных настраиваемых действий невозможно переоценить. Проверьте, поддерживает ли это установщик Windows или Wix.

MSI обеспечивает полную поддержку обработки слияния настроек файла ini, шрифтов, переменных среды, разделов реестра, информации COM, ярлыков, расширений файлов, условий запуска, установки GAC, ODBC и т. д.

WIX идет дальше благодаря поддержке очень продвинутых функций, таких как расширения SQL-сервера, установка и настройка IIS, счетчики производительности, проверка DirectX и другие задачи, связанные с игрой, создание собственного образа .NET, COM+, драйверы, правила брандмауэра. , расширения PowerShell, закрытие приложений, управление пользователями, группами, общими ресурсами и многое другое. Несколько сложнее, но гораздо надежнее, чем ваши собственные пользовательские действия. Загрузите последнюю версию WIX и прочитайте файл справки Wix.chm< /strong> — раздел ссылок на схемы Wix.

person Stein Åsmul    schedule 22.05.2014
comment
Спасибо за ответ. Я отредактировал свой вопрос и надеюсь, что теперь он понятнее. Я пытался справиться с автоматическим откатом WIX, но он не воспроизводит старую версию в случае ошибки. - person Tobias; 22.05.2014
comment
OMG ... я, наконец, решил проблему, и вы правы. Нет необходимости реализовывать мой собственный откат для этой проблемы, потому что автоматический откат WiX-Toolset уже исправляет это. Проблема заключалась в том, что когда я тестировал автоматический откат, я использовал его неправильно. Я не знал, как правильно использовать MajorUpgrade и RemoveFile... Но спасибо, что указали, что это не обязательно! Если вы отредактируете его в ответе, я приму его как правильный. - person Tobias; 23.05.2014
comment
Кстати ... ваш общий ответ великолепен, спасибо, что объяснили, что именно это было очень полезно для меня! - person Tobias; 23.05.2014