托管引导程序应用程序"无法解析文件源#34;

时间:2013-09-23 21:24:42

标签: wix

在我开始创建自己的自定义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

1 个答案:

答案 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;
}