问题的核心:我正在尝试使用VBScript下载650mb文件。超过500mb的任何文件都会失败并出现以下错误...
Error: Not enough storage is available to complete this operation
Code: 8007000E
Source: msxml3.dll
< - 使用MSXML.XMLHTTP或...
Source: WinHttp.WinHttpRequest
< - 使用WinHTTP时
我正在使用代码from here,MSXML.XMLHTTP和WinHTTP(不是wget)。我可以在任务管理器中观看的两个脚本构建到650mb以上,然后因上述错误而失败。脚本工作,如果我选择较小的文件,下载就好了。
错误消息中引用的行都是.Write objHTTP.responseBody
。
我发现其他一些人有同样的问题,虽然似乎没有大量的人试图用vbscript下载巨型文件......我无法想象为什么。
我知道这不是空间问题(我有足够的硬盘空间),或内存问题(我有4GB,物理内存在峰值时显示约70%)。我还尝试使用WinHTTP将SetTimeouts选项设置为详细here(我甚至将它们全部设置为-1,无限超时),并尝试使用允许SetTimeouts的MSXML.ServerXMLHTTP,两者都是禁止的
背景: 我正在尝试编写一个vbscript来自动下载并为大量用户安装一套软件。因为它会分发给很多人,所以我想在Windows中本地使用它,因为我不知道他们可能会或可能没有的其他软件。这极大地限制了我的选择。 Powershell策略设置为限制,所以我不能在其他计算机上使用它,而不是详细说明如何为它们重置它,这违背了应该为非技术用户做所有事情的脚本的目的。这几乎留下了vbscript。
如果没有其他方法可以做到这一点,那么我的下一步可能是自动下载和安装较小的文件,如wget,然后使用它来下载较大的文件。尽管如此,我想用最少的原生软件来做这件事。看起来这应该是可行的,但我找不到解决方案。
编辑:我不能发布超过2个链接作为新用户,所以你只需要接受我的话,我发现其他人有这个问题,但他们的线程没有答案(这里或其他任何地方)。答案 0 :(得分:0)
在这里,我看到你使用了不支持ftp的HTTP。所以我的建议是使用Wget。 http://www.codeproject.com/Tips/506439/Downloading-files-with-VBScript
答案 1 :(得分:0)
我无法重现您的问题,因此我无法提供解决方案。但是,您可以通过以块为单位而不是整体下载文件来解决此问题:
chunksize = 524288000 '500 MB
url = "..."
Set stream = CreateObject("ADODB.Stream")
stream.Open
stream.Type = 1 'binary
i = 0
Do
first = i * chunksize
last = first + chunksize - 1
Set req = CreateObject("Msxml2.XMLHttp.6.0")
req.open "GET", url, False
req.setRequestHeader "Range", "bytes=" & first & "-" & last
req.send
If req.Status = 206 Then stream.Write req.responseBody
i = i + 1
Loop Until CLng(req.getResponseHeader("Content-Length")) <> chunksize
stream.SaveToFile "C:\path\to\output.file", 2
stream.Close