在一台新机器上,尝试安装 IIS 后,IIS 管理器窗口没有列出与我的本地服务器的连接,而且似乎没有办法添加连接。
我卸载、删除了 intetpub/inetserv 文件夹,重新安装,使用 DISM 修复 ( DISM.exe /Online /Cleanup-image /Restorehealth
)、使用 sfc 扫描 ( sfc /scannow
),以及我能想到的所有方法(包括卸载、重新安装的命令行变体)。我在步骤之间重新启动,安装了 Windows 更新,但无论我尝试什么,我都会得到一个空的管理器窗口。有时“主页”按钮没有被禁用(如屏幕截图所示),但尝试单击它会在我的应用程序事件日志中出现以下异常:
The description for Event ID 13 from source Microsoft-Windows-IIS-IISManager cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer.
If the event originated on another computer, the display information had to be saved with the event.
The following information was included with the event:
IISMANAGER_CRASH
IIS Manager terminated unexpectedly.
Exception:System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.Web.Management.Host.UserInterface.ManagementFrame.NavigateToHomepage(Boolean connectionReactivating)
at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
at System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ToolStrip.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at Microsoft.Web.Management.Host.Shell.ShellApplication.Execute(Boolean localDevelopmentMode, Boolean resetPreferences, Boolean resetPreferencesNoLaunch)
Process:InetMgr
The system cannot find the file specified
在广泛搜索了遇到此问题的其他人后,我发现了各种类似但不同的情况,但关于此问题的信息很少,尽管有这个一个问题看起来一模一样,在他们的情况下,损坏的文件已被识别,而在我的情况下,我在扫描时没有看到它。
尝试通过浏览器访问该网站(例如http://localhost
)会导致 404 错误。
我能够从命令行(使用appcmd.exe
)检查和配置服务器的状态,并且似乎默认网站存在,但没有所有预期的默认配置。
在之前的安装中,我看到了我期望的所有 3 个默认应用程序池:
>appcmd.exe list apppool
APPPOOL "DefaultAppPool" (MgdVersion:v4.0,MgdMode:Integrated,state:Started)
APPPOOL ".NET v4.5 Classic" (MgdVersion:v4.0,MgdMode:Classic,state:Started)
APPPOOL ".NET v4.5" (MgdVersion:v4.0,MgdMode:Integrated,state:Started)
尽管经过几次卸载并重新安装,目前我只看到:
>appcmd.exe list apppool
APPPOOL "DefaultAppPool" (MgdVersion:v4.0,MgdMode:Integrated,state:Started)
在这两种情况下,默认站点似乎存在,但配置不正确
>appcmd.exe list sites
SITE "Default Web Site" (id:1,bindings:,state:Unknown)
在此状态下无法启动
>appcmd.exe start site "Default Web Site"
ERROR ( hresult:800710d8, message:Command execution failed.
The object identifier does not represent a valid object.
)
添加绑定可以启动,但上述 404 只会变成空白页和 401 响应代码
>appcmd.exe set site "Default Web Site" /bindings:"http://localhost:80"
>appcmd.exe list sites
SITE "Default Web Site" (id:1,bindings:http/*:80:localhost,state:Started)
我认为它可能没有正确指向 wwwroot,因此我尝试更新它,但仍然得到空白的 401
>appcmd.exe set vdir "Default Web Site/" -physicalPath:"%SystemDrive%\inetpub\wwwroot"
VDIR object "Default Web Site/" changed
继续调查,由于没有设置其他默认值,我想也许它没有使用应用程序池
>appcmd.exe set app "Default Web Site/" /applicationPool:"DefaultAppPool"
APP object "Default Web Site/" changed
我还尝试启用匿名身份验证,以确保万无一失
>appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/anonymousAuthentication /enabled:"True" /commit:apphost
Applied configuration changes to section "system.webServer/security/authentication/anonymousAuthentication" for "MACHINE/WEBROOT/APPHOST/Default Web Site" at configuration commit path "MACHINE/WEBROOT/APPHOST"
行为没有变化。最终,这些最后的步骤只是实验,看看让默认网站更接近默认配置是否可以让 IIS 管理器窗口正确加载,尽管我怀疑问题出在其他地方。我确实发现奇怪的是,多次尝试卸载并重新安装会产生相同的损坏的默认网站(即使删除了目录)。
服务启动和停止正常,iisreset 等按预期工作,等等。我不知道下一步该怎么做,所以我想问一下是否有人见过/修复过这个问题,如果是的话,是怎么解决的?否则,我是否可以检查更多日志以查看哪里出了问题?是否有我尚未尝试过的修复方法?任何可以确定根本原因或修复行为而无需重新格式化的方法都将不胜感激(尽管我怀疑重新格式化选项很快就会变得更有吸引力)。
编辑 20221213:我尝试卸载/重新安装,成功安装了 IIS 远程管理工具并将其连接到本地主机,但我安装的其他所有功能均缺失(即使卸载/重新安装)。似乎甚至缺少匿名身份验证,这在可选功能列表中甚至不是其自己的选项,这可能与即使尝试通过 appcmd 设置后仍持续出现 401 错误有关。
答案1
在新版本上启用默认管理员,然后以默认管理员身份登录,这样在“程序和功能”中安装 IIS 后,IIS 管理就可以正常启动。启动本地主机时出现 401 错误与非默认管理员用户的 IIS 管理是否为空无关。
要消除 401 错误:对于用户管理员:他们需要包含 html 或 asp 文件等的文件夹,并为管理员提供读/写权限,但也需要 IUSR 和 IIS_IUSRS 的访问权限。
答案2
我刚刚查看了通知,发现这个问题仍然存在,所以我只是想跟进并注意,虽然不清楚为什么尽管采用了相同的策略,但这会影响某些机器而不影响其他机器,但问题原来是由某些企业防病毒软件引起的,解决方案是删除所有 IIS 组件,重新启动,暂时禁用防病毒软件,安装 IIS 组件,然后重新启用防病毒软件。