在我开始创建自己的自定义Managed Bootstrapper应用程序之前,我使用下面的现有Fragment没有任何问题,即如果找不到本地文件,它将从Internet下载.msi。现在,当我尝试执行MBA时,我在日志文件中收到以下错误。
[环境]
WiX 3.7,Visual Studio 2012,x64
[Bundle.wxs]
<PackageGroupRef Id="ReportViewer"/>
[Fragment.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,state:Absent,cached:None
[14:54] i201:计划包:ReportViewer.msi,状态:缺席,默认请求:存在,请求:当前,执行:安装,回滚:无,缓存:是,否则:是,依赖:注册
[15:00] w343:提示包的来源:ReportViewer.msi,payload:ReportViewer.msi,path: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 \ Temp {416b9117-e1b4-4518-b13d-eb5416da8794} \ ReportViewer.msi,错误:0x80070002
答案 0 :(得分:4)
当本地不存在包时,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;
}