2011-02-11 5 views
13

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

Основная проблема заключается в том, что я хочу правильно запланировать мои пользовательские действия. Обычно мне нужно зарегистрировать 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. 

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

ответ

13

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

Длинный ответ - вы должны ознакомиться со сроком исполнения скрипта. Read more about it on MSDN. Когда вы видите InstallFiles в первый раз в файле журнала, это происходит, когда выполняются немедленные действия, и отложенные действия записываются и назначаются сценарию установки. Второй раз, когда он фактически выполняет (и устанавливает файлы). Если вы отложите действие, вы увидите для него такое же поведение в файле журнала.

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

+0

спасибо! на данный момент я буду придерживаться короткого ответа :) на самом деле, ответ мне совершенно ясен. сначала они готовят задачи, однако, если вы сделаете это немедленно, он не будет ждать, пока не начнется фактическая работа. –

+1

Но есть ли официальный список последовательности действий? В противном случае нам просто нужно судить и ошибиться, что кажется смешным ?! – markmnl

5

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

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

Использование

heat file myfile.dll -o myfile.wxs 

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

+0

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

+0

Я пытался использовать тепловую утилиту, но я не могу пройти мимо этого предупреждения HEAT5150. Думаю, как следствие этого предупреждения, полученный wxs-файл не содержит полезного кода, а только фрагмента «Каталог» и «Компонент». вот полное предупреждающее сообщение: 'heat.exe: warning HEAT5150: не удалось собрать данные из файла, который, как ожидалось, был бы SelfReg DLL: (...) Исключение было вызвано целью вызова.' –

+1

Некоторые вещи, которые я нашел в списке рассылки WiX: 1) Возможно, он не работает с 64-разрядными DLL-файлами. 2) Попробуйте использовать тепло в качестве администратора. 3) Попробуйте запустить RegSpy, как указано на этой странице http://www.installsite.org/pages/en/msi/tips.htm, в котором будет создан REG-файл для нагрева. WXS. 4) Убедитесь, что нет отсутствующих зависимостей. – AntonyW

Смежные вопросы