WiX动作序列

时间:2011-02-11 15:24:09

标签: wix sequence custom-action

我在运行WiX设置时正在查找操作列表及其顺序。不知何故,官方网站似乎没有提供任何信息。

基本问题是我想正确安排自定义操作。通常我需要使用regsvr32.exe注册DLL,这只能在文件复制到硬盘后才能完成。但是自定义操作

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

失败,显示错误消息“找不到文件”。

我所做的就是使用WiX Edit分析我的MSI日志,我发现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.

有人知道官方列表吗?

2 个答案:

答案 0 :(得分:14)

简短的回答 - 你应该让你自定义操作延迟并安排在InstallFiles之后(如果它依赖于安装的文件,我认为它确实如此)。

答案很长 - 你应该熟悉脚本执行期限。 Read more about it on MSDN。当您第一次在日志文件中看到InstallFiles时,就会立即执行操作并将延迟操作写入安装脚本。第二次是它实际执行(并安装文件)。如果延迟操作,您将在日志文件中看到相同的行为。

这可能听起来不是很清楚,但是直到你阅读更多有关其工作方式的内容时才能这样做。

答案 1 :(得分:5)

对于注册DLL,最好避免自行注册。

我们使用HEAT命令生成一个WiX片段,为我们注册。

使用

heat file myfile.dll -o myfile.wxs

这样做的好处是可以正确安装和删除注册表项,并且在注册完成时文件是否已安装没有问题。