![IISAdmin 无法启动,错误 0x80090006 - 如何进一步排除故障?](https://linux22.com/image/485717/IISAdmin%20%E6%97%A0%E6%B3%95%E5%90%AF%E5%8A%A8%EF%BC%8C%E9%94%99%E8%AF%AF%200x80090006%20-%20%E5%A6%82%E4%BD%95%E8%BF%9B%E4%B8%80%E6%AD%A5%E6%8E%92%E9%99%A4%E6%95%85%E9%9A%9C%EF%BC%9F.png)
不久前,我的 Windows Server 2003 机器挂了,我需要通过关闭电源强制重启。重启时,它运行了 chkdsk,而 chkdsk 报告了一些问题。
从那时起 IISAdmin 就无法启动(这意味着 IIS 根本不起作用):
C:\WINDOWS\system32>sc query iisadmin
SERVICE_NAME: iisadmin
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 1 STOPPED
(NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN))
WIN32_EXIT_CODE : 1066 (0x42a)
SERVICE_EXIT_CODE : -2146893818 (0x80090006)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
我怀疑 Metabase 已损坏,因此尝试从崩溃之前的 Metabase 历史文件中进行恢复 — — 但没有成功。
不太确定如何进一步排除故障。 SYSTEM 日志中有一个明显相关的错误,该错误经常出现,即来自 DCOM 的事件 ID 10010:
The server {A9E69610-B80D-11D0-B9B9-00A0C922E750} did not register with DCOM
within the required timeout.
但我不确定这是否真的能提供更多的信息或者这只是 IISAdmin 无法启动的另一个警告。
否则,事件日志几乎毫无帮助。下一步该怎么做才能隔离并修复此问题?我应该指出,我没有经常重启此服务器的奢侈——这是一个应用服务器,依赖该应用的用户工作到深夜,我需要在现场重启它,因为它并不总是可靠地重启——但我通常在场外工作。
因此,如果有任何方法可以继续调查此问题而不需要重新启动,我很想听到。
答案1
根据 winerror.h,0x80090006 表示“NTE_BAD_SIGNATURE”,这是 Win32 API 调用“CryptVerifyMessageSignature”的返回值,表示“该消息的签名未经验证”。在我看来,这似乎是与 iisadmin 启动相关的某个文件的加密签名检查失败。
我会考虑执行“SFC /SCANNOW”来查看是否可以替换损坏的文件,假设系统文件检查器可以获取某些 Windows 安装文件,并假设它是一个损坏的文件。(是的 - “损坏”是一个技术术语。对我来说听起来比“损坏”好。损坏?文件是否收受了贿赂?)
如果在“SFC /SCANNOW”之后它仍无法正常工作,我可能会启动“进程监视器”并查看正在加载哪些文件。将会有一个很多生成的日志条目,但您可能会在大海中找到针。
鉴于机器发生硬断电并且文件系统损坏,我会押注“SFC /SCANNOW”来查找一个或多个损坏的文件。
旁白:那么,它无法可靠地重启,是吗?给我一个“该网站瘫痪了!” 有点感觉...(不要重新启动网络服务器!呵呵...)
答案2
只需从“添加/删除程序”>“Windows 组件”重新安装 IIS。我之前曾在 Windows 2003 服务器上安装过它,无需重新启动。