关于ASP.NET在IIS一些问题的经验总结

关于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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值