关于ASP.NET在IIS一些问题的经验总结
很多开发人员对于IIS和ASPNET的安装等问题困扰,特此做下面的小
总结,请大家多交流!
iis 坏了修复办法!!!!!!!
一般IIS运行不了ASP.NET,试一下下面四种方法,99%有效:
1。.NET 安装的顺序应该是先装IIS,再装VS.NET,如果次序反了,
或者IIS重装了,就需要使用aspnet_regiis.exe -i来重新安装IIS
Mapping(主要用于aspx, asmx等文件的Extention的匹配)。在
C:/WINDOWS/Microsoft.NET/Framework/v1.0.3705目录下,运行下
面的命令:aspnet_regiis.exe -i
2。重设ASPNET的密码,然后在下面的目录中找到Machine.config文
件:%Systemroot%/Microsoft.NET/Framework/v1.0.3705/CONFIG
(Systemroot是你的安装目录),在<processModel>标识中添加/修
改:userName和password3。如果还不行,重装IIS,然后再按照方
法1进行操作4。如果你的机器是域控制器,你可以参考Q315158:
ASP.NET Does Not Work withASPNET Account on Domain
Controller:http://support.microsoft.com/default.aspx?
scid=KB;EN-US;Q315158&和你大致讲一下操作的步骤:
1。在Administrative Tools->Active Directory Users and
Computers中建立一个名为ASPUSER的用户,将该用户添加到用户组
中(默认情况下已在User Group中)
2。在Administrative Tools->Local Security Settings->Local
Policy->UserRight Assignment中,双击右栏的Log on as a batch
job项,在弹出的窗口中点击Add,选择或输入刚才建立的ASPUSER帐
号,确定。(需要重启机器)
3。确保ASPUSER帐号有相应文件、目录的访问权限4。在下面的目录
中找到Machine.config文件:%Systemroot%
/Microsoft.NET/Framework/v1.0.3705/CONFIG (Systemroot是你
的安装目录),在<processModel>标识中添加/修改:
userName="DomainName/ASPUSER" password="ASPUSERpassword" 其
中ASPUSERpassword是刚刚建立的ASPUSER的密码,DomainName是你的域名
最后把机器RESET一下!看看!应该OK了!
IIS下,访问asp页面出现错误:
访问 IIS 元数据库失败
“用于运行 ASP.NET 的进程帐户必须具有对 IIS 元数据库(如 IISservernameW3SVC)的读访问权。有关如何修改元数据库权限的信息,请参见 httpsupport.microsoft.comkbid=267904。”
原因可能是先安装.NET Framework后安装IIS,导致IIS没有为ASP.NET设置用户。
解决方法:1、运行CWindowsMicrosoft.NETFrameworkversion下的
aspnet_regiis -i
2、或者下载Metaacl.vbs脚本并运行
cscript metaacl.vbs
手工修改权限
--Metaacl.vbs 文件
set Args = wscript.Arguments
if Args.Count < 1 then
wscript.echo "Usage: MetaACL <metabase path> [username] [permissions | /d]"
wscript.echo " - no username will show all acls on metabase path"
wscript.echo " - username with no permissions will show permissions for that user "
wscript.echo " or group"
wscript.echo " - username with permissions will set those permissions for that "
wscript.echo " user or group"
wscript.echo " - permissions is a string of the following charcaters 'RWSUED'"
wscript.echo " R - Read"
wscript.echo " W - Write"
wscript.echo " S - Restricted Write"
wscript.echo " U - Unsecure properties read"
wscript.echo " E - Enumerate Keys"
wscript.echo " D - Write DACL (permissions)"
wscript.echo " - /d = delete that user or group from the ACL"
wscript.echo ""
wscript.echo " Example: MetaACL ""IIS://Localhost/W3SVC"" MYDOMAIN/Joebob RW"
wscript.Quit
end if
metapath = Args(0)
if Args.Count = 1 then
DumpAcl(metapath)
wscript.Quit
end if
username = Args(1)
if Args.Count = 2 then
DumpUserAce metapath, username
wscript.Quit
end if
if Args(2) = "/d" then
DeleteUserAce metapath, username
end if
bitmask = CreateMask(Args(2))
AddMetaAce metapath, username, bitmask
wscript.Quit
Sub AddMetaAce (path, user, mask)
On Error Resume Next
set obj = GetObject(path)
if Err.Number <> 0 then
wscript.echo Err.Number
wscript.echo path
end if
set objAcl = obj.AdminAcl
if Err.Number <> 0 then
wscript.echo " Error reading property: " + Err.Number + " " + Err.Description
wscript.echo path
wscript.Quit
end if
set objDACL = objAcl.DiscretionaryACL
for each objACE in objDACL
if objACE.Trustee = user then
objDACL.RemoveAce(objACE)
Set Ace = CreateObject("AccessControlEntry")
Ace.Trustee = user
Ace.AccessMask = mask
objDACL.AddAce(Ace)
objAcl.DiscretionaryACL = objDACL
obj.AdminAcl = objAcl
obj.SetInfo
wscript.echo "ACE for " & user & " changed."
wscript.Quit
end if
Next
' The user wasn't in the DACL, add them now
Set Ace = CreateObject("AccessControlEntry")
Ace.Trustee = user
Ace.AccessMask = mask
objDACL.AddAce(Ace)
objAcl.DiscretionaryACL = objDACL
obj.AdminAcl = objAcl
if Err.Number <> 0 then
wscript.echo "error setting acl: " + Err.Number + ", " + Err.Description
end if
obj.SetInfo
if Err.Number <> 0 then
wscript.echo "error setting info: " + Err.Number + ", " + Err.Description
end if
wscript.echo "ACE for " & user & " added."
wscript.Quit
End Sub
Function CreateMask(strMask)
mask = 0
NumChars = Len(strMask)
for i = 1 To NumChars
char = Mid(strMask, i, 1)
Select Case char
Case "R" mask = mask + &H1
Case "W" mask = mask + &H2
Case "S" mask = mask + &H20
Case "U" mask = mask + &H80
Case "E" mask = mask + &H8
Case "D" mask = mask + &H40000
End Select
Next
CreateMask = mask
End Function
Sub DeleteUserAce (path, user)
set obj = GetObject(path)
if Err.Number <> 0 then
wscript.echo Err.Number
wscript.echo path
end if
set objAcl = obj.AdminAcl
if Err.Number <> 0 then
if Err.Number = 438 then 'Object doesn't support this property or method
wscript.echo " AdminAcl property does not exist on this object"
wscript.Quit
else
wscript.echo " Error: " + Err.Number + " " + Err.Description
wscript.echo path
wscript.Quit
end if
end if
set objDACL = objAcl.DiscretionaryACL
for each objACE in objDACL
if objACE.Trustee = user then
objDACL.RemoveAce(objACE)
objAcl.DiscretionaryACL = objDACL
obj.AdminAcl = objAcl
obj.SetInfo
wscript.echo "ACE for " & user & " deleted."
wscript.Quit
end if
Next
wscript.echo "No ACE for " & user & " found."
wscript.Quit
End Sub
Sub DumpUserAce(path, user)
on error resume next
set obj = GetObject(path)
if Err.Number <> 0 then
wscript.echo Err.Number
wscript.echo path
end if
set objAcl = obj.AdminAcl
if Err.Number <> 0 then
if Err.Number = 438 then 'Object doesn't support this property or method
wscript.echo " AdminAcl property does not exist on this object"
wscript.Quit
else
wscript.echo " Error: " + Err.Number + " " + Err.Description
wscript.echo path
wscript.Quit
end if
end if
set objDACL = objAcl.DiscretionaryACL
for each objACE in objDACL
if objACE.Trustee = user then
mask = GetMaskString(objACE.AccessMask)
wscript.echo objACE.Trustee
wscript.echo " Access: " & mask
wscript.echo " Type: " & CStr(objACE.AceType)
wscript.echo " AceFlags: " & CStr(objACE.AceFlags)
wscript.echo " Flags: " & CStr(objACE.Flags)
wscript.echo " ObjectType: " & objACE.ObjectType
wscript.echo " InheritedObjectType: " & objAce.InheritedObjectType
wscript.Quit
end if
next
wscript.echo " No ACE in ACL for " & user
wscript.Quit
End Sub
Sub DumpAcl(path)
on error resume next
set obj = GetObject(path)
if Err.Number <> 0 then
wscript.echo Err.Number
wscript.echo path
ReportError()
end if
set objAcl = obj.AdminAcl
if Err.Number <> 0 then
if Err.Number = 438 then 'Object doesn't support this property or method
wscript.echo " AdminAcl property does not exist on this object"
wscript.Quit
else
wscript.echo " Error: " + Err.Number + " " + Err.Description
wscript.echo path
wscript.Quit
end if
end if
set objDACL = objAcl.DiscretionaryACL
for each objACE in objDACL
mask = GetMaskString(objACE.AccessMask)
wscript.echo objACE.Trustee
wscript.echo " Access: " & mask
next
End Sub
Function GetMaskString(mask)
if (mask and &H1) <> 0 then
maskstr = "R"
else
maskstr = " "
end if
if (mask and &H2) <> 0 then
maskstr = maskstr + "W"
else
maskstr = maskstr + " "
end if
if (mask and &H20) <> 0 then
maskstr = maskstr + "S"
else
maskstr = maskstr + " "
end if
if (mask and &H80) <> 0 then
maskstr = maskstr + "U"
else
maskstr = maskstr + " "
end if
if (mask and &H8) <> 0 then
maskstr = maskstr + "E"
else
maskstr = maskstr + " "
end if
if (mask and &H40000) <> 0 then
maskstr = maskstr + "D"
else
maskstr = maskstr + " "
end if
GetMaskString = maskstr
End Function