在WiX自定义托管引导程序应用程序中下载安装程序包的正确方法是什么?

时间:2013-01-31 13:58:06

标签: c# wix wix3.7

我写了一个我一直在使用的WiX自定义MBA,它嵌入了我安装所需的所有安装包(msis,cabs和exes)。但是,我现在想制作一个轻量级的Web引导程序,它将下载需要安装的软件包。我以为你可以免费使用底层的WiX引导程序引擎,但我想我错了。

我尝试订阅ResolveSource事件以获取软件包的下载URL并将其下载到本地源位置,但是在此过程中似乎已经太晚了,因为我的安装失败并显示错误“无法解析源代码for file:“(即使下载成功)。

我尝试的样本:

private void OnResolveSource(object sender, ResolveSourceEventArgs e)
{  
    string localSource = e.LocalSource;
    string downloadSource = e.DownloadSource;

    if (!File.Exists(localSource) && !string.IsNullOrEmpty(downloadSource))
    {
        try
        {
            using (WebClient webClient = new WebClient())
            {
                webClient.DownloadFile(e.DownloadSource, e.LocalSource);
            }
        }

        catch (ArgumentNullException ex)
        {
            e.Result = Result.Error;
        }

        catch (WebException ex)
        {
            e.Result = Result.Error;
        }
    }
}

1 个答案:

答案 0 :(得分:7)

感谢Rob Mensching在wix-users邮件列表上回答这个问题:

  

确保提供您的网址包(创作最简单,但您可以   以编程方式设置它们然后从中返回IDDOWNLOAD   ResolveSource调用。

我按如下方式编辑了我的代码:

private void OnResolveSource(object sender, ResolveSourceEventArgs e)
{
    if (!File.Exists(e.LocalSource) && !string.IsNullOrEmpty(e.DownloadSource))
        e.Result = Result.Download;
}

将结果设置为Result.Download指示引导程序引擎下载程序包。无需尝试自己下载文件。