URLDownloadToFile 失败,代码为 0x800c0008 (INET_E_DOWNLOAD_FAILURE)

Posted

技术标签:

【中文标题】URLDownloadToFile 失败,代码为 0x800c0008 (INET_E_DOWNLOAD_FAILURE)【英文标题】:URLDownloadToFile fails with code 0x800c0008 (INET_E_DOWNLOAD_FAILURE) 【发布时间】:2014-01-29 20:28:08 【问题描述】:

我正在尝试使用 URLDownloadToFile 下载文件,但在文件部分下载后得到 INET_E_DOWNLOAD_FAILURE。我的电话看起来像:

HRESULT hRes = ::URLDownloadToFile( NULL, strTemp, strDestination, 0, pCallback );

strTemp 以如下形式给出 URL:

https:////

pCallback 是 IBindStatusCallback、IHttpSecurity 和 IWindowForBindingUI 的实现。

我能够让 Windows 显示一个对话框,警告我有关网站的安全证书(通过在 IHttpSecurity::OnSecurityProblem 中返回 S_FALSE)。

我在 IBindStatusCallback::OnProgress 中收到了几个调用,这些调用具有一系列 ulStatus 值:

BINDSTATUS_PROXYDETECTING BINDSTATUS_COOKIE_SENT BINDSTATUS_CONNECTING BINDSTATUS_SENDINGREQUEST

在最后一次 OnProgress 调用之后,数据包嗅探器显示我从服务器下载了 100+ KB 的数据(文件为 18+ MB。)然后我收到了对 IBindStatusCallback::OnStopBinding 的调用,其 hResult 值为 INET_E_DOWNLOAD_FAILURE .

我知道写入目标目录的权限不是问题。

我不确定我是否正确处理了 IBindStatusCallback::GetBindInfo 和 ::OnStartBinding。这是我的代码:

STDMETHODIMP CDownloadCallback::GetBindInfo( DWORD* pBINDF, BINDINFO* pBindinfo )

   *pBINDF = BINDF_PULLDATA | BINDF_NOWRITECACHE | BINDF_GETNEWESTVERSION;
   return S_OK;


STDMETHODIMP CDownloadCallback::OnStartBinding( DWORD dwReserved, IBinding* pBinding )

   return E_NOTIMPL;

对可能出现的问题有任何想法吗?

【问题讨论】:

【参考方案1】:

我现在也遇到了这个问题,虽然当我在 6 个月前最后一次使用/开发该程序时,它运行良好。但是,如果我以管理员权限运行程序,它就可以正常工作。

我的症状与韦恩的非常相似。进程监视器显示它通过 TCP 与服务器通信(尽管数据比没有管理员权限时略少)它还在两种模式下都调用状态回调。下载文件的位置是临时目录,不需要管理员权限。

urlmon.dll 的版本是 11.00.96.17041 32bit,日期为 2014 年 3 月,比之前使用的版本更新,但这是原因还是其他原因?

【讨论】:

以上是关于URLDownloadToFile 失败,代码为 0x800c0008 (INET_E_DOWNLOAD_FAILURE)的主要内容,如果未能解决你的问题,请参考以下文章

获取bing图片并自动设置为电脑桌面背景(使用 URLDownloadToFile API函数)

IDownloadManager::Download 中的 URLDownloadToFile 错误 (0x80004004)

我应该使用 URLDownloadToFile 吗?

Windows函数 URLDownloadToFile

URLDownloadToFile 总是返回 S_OK

C ++ WinAPI URLDownloadToFile(urlmon)错误[重复]