2008年11月26日星期三

[无错版]win2003上传不能超过200k的解决办法(VBS脚本程序法,手动修改法)

来源:http://www.yongfa365.com
原因:
在 IIS 6.0 中,默认设置是特别严格和安全的,这样可以最大限度地减少因以前太宽松的超时和限制而造成的攻击。
配置数据库属性实施的最大 ASP 张贴大小为 204,800 个字节,并将各个字段限制为 100 KB。在 IIS 6.0 之前的版本中,没有这个限制。
view plaincopy to clipboardprint?

1. '把这段代码复制到记事本里然后保存为:win2003-200K.vbs,看好了扩展名为.vbs
2. Set providerObj=GetObject("winmgmts:/root/MicrosoftIISv2")
3. Set vdirObj=providerObj.Get("IIsWebServiceSetting='W3SVC'")
4. WScript.Echo "Before: " & vdirObj.AspMaxRequestEntityAllowed
5. vdirObj.AspMaxRequestEntityAllowed=20480000 '可接收多大字节,此处默认为:204800即:200K
6. vdirObj.Put_()
7. WScript.Echo "Now: " & vdirObj.AspMaxRequestEntityAllowed

'把这段代码复制到记事本里然后保存为:win2003-200K.vbs,看好了扩展名为.vbs
Set providerObj=GetObject("winmgmts:/root/MicrosoftIISv2")
Set vdirObj=providerObj.Get("IIsWebServiceSetting='W3SVC'")
WScript.Echo "Before: " & vdirObj.AspMaxRequestEntityAllowed
vdirObj.AspMaxRequestEntityAllowed=20480000 '可接收多大字节,此处默认为:204800即:200K
vdirObj.Put_()
WScript.Echo "Now: " & vdirObj.AspMaxRequestEntityAllowed

以前在网上看到过以下代码(以下代码是错的,如要直接使用,请使用上边提供的):
view plaincopy to clipboardprint?

1. set providerObj=GetObject("winmgmts:/root/MicrosoftIISv2")
2. set vdirObj=providerObj.get("IIsWebVirtualDirSetting='W3SVC/1/ROOT'")
3. '输出当前值:
4. WScript.Echo "Before: " & vdirObj.AspMaxRequestEntityAllowed
5. '设置属性:
6. vdirObj.AspMaxRequestEntityAllowed=204800000' 将属性更改保存在配置数据库中:
7. vdirObj.Put_()
8. '输出更改后的值
9. WScript.Echo "Now: " & vdirObj.AspMaxRequestEntityAllowed

set providerObj=GetObject("winmgmts:/root/MicrosoftIISv2")
set vdirObj=providerObj.get("IIsWebVirtualDirSetting='W3SVC/1/ROOT'")
'输出当前值:
WScript.Echo "Before: " & vdirObj.AspMaxRequestEntityAllowed
'设置属性:
vdirObj.AspMaxRequestEntityAllowed=204800000' 将属性更改保存在配置数据库中:
vdirObj.Put_()
'输出更改后的值
WScript.Echo "Now: " & vdirObj.AspMaxRequestEntityAllowed

但这个代码在我使用的过程中,有时有用,有时没用,感觉很郁闷,重装系统后就可以,过一段时间就不可以,这次是为了研究这个,找了一堆网页,网上这代码流传太广了,虽然解决不了问题,还在microsoft的"我的wmi坏了"上排除了一遍,还是没找到问题所在,不过他给了我个提示,可能是命名空间不存在,起初我想有时可以有时不可以,不应该是不存在呀,最后发现'W3SVC/1/ROOT'这个东西我的机器上根本就没有,而重装的系统上有这个,想了想,这里的"1"不会是IIS的默认站点吧,安全需要,每次做安全设置时把这个站点都删除了,当然没有了,马上试了一下,NND,得亏我虚拟计算机多,试起来容易,真是这个问题,只有没有这个站点就会有这样的错误提示(呵呵,两个版,一个中文版提示,一个英文版提示,为了研究这个把好多个版本都搬出来了):

---------------------------
Windows 脚本宿主
---------------------------
脚本: D:\My system\桌面\200K.vbs
行: 2
字符: 1
错误: 系统找不到指定的路径。
代码: 80070003
源: SWbemServicesEx

---------------------------
确定
---------------------------

---------------------------
Windows Script Host
---------------------------
Script: C:\Documents and Settings\Administrator\Desktop\200k.vbs
Line: 2
Char: 1
Error: The system cannot find the path specified.
Code: 80070003
Source: SWbemServicesEx

---------------------------
OK
---------------------------

呵呵,说远了,上面说到第一个代码是正确的,保存后直接双击这个文件运行就可以了,他会先显示当前允许上传的大小,然后显示修改后的大小

一般上面的操作一定成功。万一不成功的话呢:

二、直接修改配置文件

先在服务里关闭iis admin service服务
找到windows\system32\inetsrv\下的metabase.xml,
打开,找到ASPMaxRequestEntityAllowed 把他修改为需要的值,
然后重启iis admin service服务

也可以这样:Win+R-->cmd-->net stop iisadmin-->改windows\system32\inetsrv\下的 metabase.xml--->cmd-->net start iisadmin-->net start w3svc

三、下载微软IIS专用管理工具:

IIS6 Resource Kit Tools(http://www.microsoft.com/downloads/details.aspx?FamilyID=56FC92EE-A71A-4C73-B628-ADE629C89499&displaylang=en),安装后利用Metabase Explorer修改了(local)\LM\W3SVC\AspMaxRequestEntityAllowed属性(默认为 200K=204800),修改为1G就是了;同时修改了AspScriptTimeout属性调整下时限,就可以上传大文件了。




一、 脚本修改法win2003-200K.vbs[推荐]

这就造成了文件上传不能超过200k,而事实上是提交数据不能超过200k,你可以发一个很长的帖子试试,也会出现这个错误

解决办法:见此文第一个示例。

没有评论: