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

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

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

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

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

то, что я сделал, - это анализ журнала моего MSI с помощью Wix Edit, и я обнаружил, что действие 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.

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

2 ответов


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

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

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


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

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

использовать

heat file myfile.dll -o myfile.wxs

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