用 WiX Burn 制作托管安装包:出现 0x80070002 错误

2023-10-23 08:34:51 浏览数 (2)

使用 WiX 的 Burn 引擎制作自定义托管引导程序的 exe 安装包时,双击生成的安装包没有反应。如果查看日志可以发现有 0x80070002 错误。本文介绍其调查和解决方法。

现象

双击制作的自定义引导程序的 exe 安装包没有反应,通过查看 Burn 引擎的输出日志可以发现如下关键的错误码:

1 2 3 4 5 6 7 8 9

... 1874:8D8Ci000: Loading managed bootstrapper application. 1874:8D8Ce000: Error 0x80070002: Failed to create the managed bootstrapper application. 1874:8D8Ce000: Error 0x80070002: Failed to create UX. 1874:8D8Ce000: Error 0x80070002: Failed to load UX. 1874:8D8Ce000: Error 0x80070002: Failed while running ... 1874:8D8Ce000: Error 0x80070002: Failed to run per-user mode. 1874:8D8Ci007: Exit code: 0x80070002, restarting: No

调查

通过查询 HRESULT 错误码 0x80070002 可以得知它代表的意思是“文件不存在”。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

❯ err 0x80070002 # for hex 0x80070002 / decimal -2147024894 COR_E_FILENOTFOUND corerror.h DIERR_NOTFOUND dinput.h DIERR_OBJECTNOTFOUND dinput.h STIERR_OBJECTNOTFOUND stierr.h DRM_E_WIN32_FILE_NOT_FOUND windowsplayready.h E_FILE_NOT_FOUND wpc.h # as an HRESULT: Severity: FAILURE (1), FACILITY_NTWIN32 (0x7), Code 0x2 # for hex 0x2 / decimal 2 STATUS_WAIT_2 ntstatus.h # as an HRESULT: Severity: FAILURE (1), FACILITY_WIN32 (0x7), Code 0x2 ERROR_FILE_NOT_FOUND winerror.h # The system cannot find the file specified. # 8 matches found for "0x80070002"

所以到底是什么不存在呢?

这篇入门教程中,涉及到找不到托管引导程序(WiX 官方喜欢称之为 MBA,Managed Bootstrapper Application)的地方可能有这些:

  1. Bundle.wxs 文件中将托管引导程序加入到负载的地方
  2. BootstrapperCore.config 文件中,设置的 assemblyName 属性

对于 1,如果加入到负载时文件不存在,那么这个 Bundle.wxs 所在的项目都无法编译通过,所以 1 原因可以排除。那么只剩下原因 2 了,如果发现其名称与实际程序集名称不一样(例如改了项目名,或者从教程中复制了代码却没有对应改成自己项目中的名字),那么原因就是这个了。

解决

修改 BootstrapperCore.config 文件(在这篇教程中是 App.config 文件),将 assemblyName 的值改为正确的托管引导程序(MBA)的名字。

本文会经常更新,请阅读原文: https://blog.walterlv.com/post/wix-managed-bootstrapper-application-error-80070002.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 ([email protected]) 。

0 人点赞