托管引导程序应用程序“无法解析文件源”
Posted
技术标签:
【中文标题】托管引导程序应用程序“无法解析文件源”【英文标题】:Managed Bootstrapper Application "Failed to resolve source for file" 【发布时间】:2013-09-23 21:24:41 【问题描述】:在我开始创建自己的自定义托管引导程序应用程序之前,我使用下面的现有片段没有问题,即如果找不到本地文件,它将从互联网下载 .msi。现在,当我尝试执行 MBA 时,我在日志文件中收到以下错误。
[环境] WiX 3.7、Visual Studio 2012、x64
[Bundle.wxs]
<PackageGroupRef Id="ReportViewer"/>
[片段.wxs]
<PackageGroup Id="ReportViewer">
<MsiPackage DisplayName="Microsoft Report Viewer 2012 Runtime"
Cache="no" Compressed="no" ForcePerMachine="yes" Permanent="yes" Vital="yes"
SourceFile="C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\Bootstrapper\Packages\ReportViewer\ReportViewer.msi"
DownloadUrl="http://go.microsoft.com/fwlink/?LinkID=217022"
InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= v6.0)"/>
</PackageGroup>
[日志]
[14:42]i101:检测到的包:ReportViewer.msi,状态:不存在,缓存:无
[14:54]i201:计划包:ReportViewer.msi,状态:不存在,默认请求:存在,请求:存在,执行:安装,回滚:无,缓存:是,取消缓存:是,依赖项:注册
[15:00]w343:提示输入包源:ReportViewer.msi,有效负载:ReportViewer.msi,路径:E:\ReportViewer.msi [15:00]e054:无法解析文件源:E:\ReportViewer.msi,错误:0x80070002。 [15:00]e000:错误 0x80070002:提示输入源时失败(原始路径“E:\ReportViewer.msi”)。 [15:00]e313:无法获取有效负载:ReportViewer.msi 到工作路径:C:\Users\POS1User\AppData\Local\Temp416b9117-e1b4-4518-b13d-eb5416da8794\ReportViewer.msi,错误:0x80070002 .
【问题讨论】:
【参考方案1】:当本地不存在包时,Burn 引擎会要求您的引导程序应用程序处理 ResolveSource 调用。如this other Stack Overflow answer 中所述,您应该为 ResolveSource 事件添加自己的事件处理程序。您可以简单地指示 Burn 为您下载软件包:
this.Bootstrapper.ResolveSource += OnResolveSource;
...
private void OnResolveSource(object sender, ResolveSourceEventArgs e)
if (!File.Exists(e.LocalSource) && !string.IsNullOrEmpty(e.DownloadSource))
e.Result = Result.Download;
【讨论】:
我试过了,但是OnResolveSource
方法从未被触发(调试断点永远不会到达那里)
我建议仔细检查这条路线。检查apply.cpp 显示w343
和e054
日志行之间是对pUX->pUserExperience->OnResolveSource
的调用,因此您的BA 应该收到此事件。
我有一个重要的问题,为什么 WIX 文档根本没有提到这一点?最近几天我一直在与这件事作斗争......非常感谢你以上是关于托管引导程序应用程序“无法解析文件源”的主要内容,如果未能解决你的问题,请参考以下文章
无法从托管引导程序应用程序 C#-代码中的引导程序变量读取输入
[Wix Bundle Managed Bootstrapper]错误 0x80070002:无法创建托管引导程序应用程序