Последовательность действий WiX

Я искал список действий и их последовательность при запуске установки WiX. Как-то официальный сайт, похоже, не предоставляет никакой информации.

Основная проблема заключается в том, что я хочу правильно запланировать мои пользовательские действия. Обычно мне нужно зарегистрировать DLL с regsvr32.exe, и это можно сделать только после копирования файлов на жесткий диск. Однако пользовательское действие

<Custom Action="RegisterShellExt" After="InstallFiles">

не удалось с сообщением об ошибке "файл не найден".

То, что я сделал тогда, анализирует журнал моего MSI с помощью WiX Edit, и я обнаружил, что Action InstallFiles существует более одного раза. И эффективно файлы записываются только во второй раз. Поэтому я изменил свое действие на следующее:

<Custom Action="RegisterShellExt" Before="InstallFinalize">

Вот последовательность, которую я извлек из журналов моего MSI:

Action start 15:16:49: INSTALL.
Action start 15:16:49: PrepareDlg.
Action start 15:16:49: AppSearch.
Action start 15:16:49: LaunchConditions.
Action start 15:16:49: ValidateProductID.
Action start 15:16:49: DIRCA_NEWRETARGETABLEPROPERTY1.5D429292039C46FCA3253E37B4DA262A.
Action start 15:16:50: CostInitialize.
Action start 15:16:50: FileCost.
Action start 15:16:50: CostFinalize.
Action start 15:16:50: WelcomeDlg.
Action 15:16:51: LicenseAgreementDlg. Dialog created
Action 15:16:53: CustomizeDlg. Dialog created
Action 15:16:55: VerifyReadyDlg. Dialog created
Action start 15:16:56: ProgressDlg.
Action start 15:16:56: ExecuteAction.
Action start 15:16:58: INSTALL.
Action start 15:16:58: AppSearch.
Action start 15:16:58: LaunchConditions.
Action start 15:16:58: ValidateProductID.
Action start 15:16:58: CostInitialize.
Action start 15:16:59: FileCost.
Action start 15:16:59: CostFinalize.
Action start 15:16:59: InstallValidate.
Action start 15:17:00: InstallInitialize.
Action start 15:17:08: ProcessComponents.
Action 15:17:09: GenerateScript. Generating script operations for action:
Action ended 15:17:09: ProcessComponents. Return value 1.
Action start 15:17:09: UnpublishFeatures.
Action start 15:17:09: RemoveShortcuts.
Action start 15:17:09: RemoveFiles.
Action start 15:17:09: InstallFiles.
Action start 15:17:10: CreateShortcuts.
Action start 15:17:10: RegisterUser.
Action start 15:17:10: RegisterProduct.
Action start 15:17:10: PublishFeatures.
Action start 15:17:10: PublishProduct.
Action start 15:17:10: ConfigureInstaller.
Action start 15:17:10: InstallFinalize.
Action 15:17:10: ProcessComponents. Updating component registration
Action 15:17:12: InstallFiles. Copying new files
Action 15:17:21: CreateShortcuts. Creating shortcuts
Action 15:17:21: RegisterProduct. Registering product
Action 15:17:23: ConfigureInstaller. [[note: CustomAction]]
Action 15:17:22: PublishFeatures. Publishing Product Features
Begin CustomAction 'ConfigureInstaller'
Action 15:17:28: RollbackCleanup. Removing backup files
Action ended 15:17:28: InstallFinalize. Return value 1.
Action start 15:17:28: RegisterShellExt. [[note: CustomAction]]
Action ended 15:17:33: INSTALL. Return value 1.
Action start 15:17:35: ExitDialog.

Кто-нибудь знает официальный список?

Ответы

Ответ 1

Короткий ответ - вы должны сделать отложенное пользовательское действие и запланировать после InstallFiles (если он полагается на установленный файл, который, как я думаю, он делает).

Длинный ответ - вы должны ознакомиться с термином исполнения script. Подробнее об этом читайте в MSDN. Когда вы видите InstallFiles в первый раз в файле журнала, он, когда выполняются немедленные действия, и отложенные действия записываются и планируются установкой script. Второй раз, когда он фактически выполняет (и устанавливает файлы). Если вы отложите действие, вы увидите для него поведение в файле журнала.

Это может показаться не очень ясным, но оно не может, пока вы не прочитаете больше о том, как он предназначен для работы.

Ответ 2

Для регистрации DLL лучше избегать самостоятельной регистрации.

Мы используем команду HEAT для генерации фрагмента WiX, который выполняет регистрацию для нас.

Используйте

heat file myfile.dll -o myfile.wxs

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