使用 WiX 的 Burn 引擎制作自定义托管引导程序的 exe 安装包时,双击生成的安装包没有反应。如果查看日志可以发现有 0x80131508
错误。本文介绍其调查和解决方法。
现象
双击制作的自定义引导程序的 exe 安装包没有反应,通过查看 Burn 引擎的输出日志可以发现如下关键的错误码:
1
2
3
4
5
6
7
8
9
...
[BCD8:B4DC][2021-07-16T11:47:32]i000: Loading managed bootstrapper application.
[BCD8:B4DC][2021-07-16T11:47:32]e000: Error 0x80131508: Failed to create the managed bootstrapper application.
[BCD8:B4DC][2021-07-16T11:47:32]e000: Error 0x80131508: Failed to create UX.
[BCD8:B4DC][2021-07-16T11:47:32]e000: Error 0x80131508: Failed to load UX.
[BCD8:B4DC][2021-07-16T11:47:32]e000: Error 0x80131508: Failed while running
...
[BCD8:B4DC][2021-07-16T11:47:32]e000: Error 0x80131508: Failed to run per-user mode.
[BCD8:B4DC][2021-07-16T11:47:32]i007: Exit code: 0x80131508, restarting: No
调查
通过查询 HRESULT 错误码 0x80131508
可以得知它代表的意思是“INDEXOUTOFRANGE”。啊这……说明是 Burn 引擎出现了内部因为某些原因出现了错误,并且没有正确把错误原因标记出来。
然而对我们简单的托管安装包界面来说,更可能是我们自己的某些配置或代码不正确,导致 Burn 引擎内部代码炸掉的。
解决
这样的错误几乎不具有可调试性。因此,我直接将我偶然发现的原因和解决办法贴出来。
参考这篇入门教程中的代码,如果 AssemblyInfo.cs 文件中缺少标记 BootstrapperApplication
类型的特性,那么就会出现此错误。
1
2
3
4
5
6
7
...
++ using Microsoft.Tools.WindowsInstallerXml.Bootstrapper;
++ using Walterlv.InstallerUI;
++ [assembly: BootstrapperApplication(typeof(Program))]
...
然而呀,官方在教大家写托管引导程序的时候,翻遍了整个文档都没有提醒过要写这个特性!所以特别容易被官方文档带偏,这里记录此文章避免大家踩坑。
本文会经常更新,请阅读原文: https://blog.walterlv.com/post/wix-managed-bootstrapper-application-error-80131508.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 ([email protected]) 。