使用 WiX 的 Burn 引擎制作自定义托管引导程序的 exe 安装包时,双击生成的安装包没有反应。如果查看日志可以发现有 0x80070002
错误。本文介绍其调查和解决方法。
现象
双击制作的自定义引导程序的 exe 安装包没有反应,通过查看 Burn 引擎的输出日志可以发现如下关键的错误码:
1
2
3
4
5
6
7
8
9
...
[1874:8D8C][2021-07-15T19:28:29]i000: Loading managed bootstrapper application.
[1874:8D8C][2021-07-15T19:28:29]e000: Error 0x80070002: Failed to create the managed bootstrapper application.
[1874:8D8C][2021-07-15T19:28:29]e000: Error 0x80070002: Failed to create UX.
[1874:8D8C][2021-07-15T19:28:29]e000: Error 0x80070002: Failed to load UX.
[1874:8D8C][2021-07-15T19:28:29]e000: Error 0x80070002: Failed while running
...
[1874:8D8C][2021-07-15T19:28:29]e000: Error 0x80070002: Failed to run per-user mode.
[1874:8D8C][2021-07-15T19:28:29]i007: 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)的地方可能有这些:
- Bundle.wxs 文件中将托管引导程序加入到负载的地方
- 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]) 。