3

在我开始创建自己的自定义托管引导程序应用程序之前,我使用的是下面的现有片段,没有问题,即如果找不到本地文件,它将从互联网下载 .msi。现在,当我尝试执行 MBA 时,我在日志文件中收到以下错误。

[环境]
WiX 3.7, Visual Studio 2012, x64

[捆绑.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,状态:不存在,默认请求:存在,ba 请求:存在,执行:安装,回滚:无,缓存:是,取消缓存:是,依赖项:注册

[15:00]w343:提示包源:ReportViewer.msi,有效负载:ReportViewer.msi,路径:E:\ReportViewer.msi
[15:00]e054:无法解析文件源:E:\ReportViewer。微星,错误: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 .

4

1 回答 1

7

当本地不存在包时,Burn 引擎会要求您的引导程序应用程序处理 ResolveSource 调用。正如其他 Stack Overflow 答案中所解释的,您应该为 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;
}
于 2013-09-24T05:56:48.567 回答