不久前,我的 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
我怀疑元数据库损坏了,所以我尝试从崩溃之前的元数据库历史文件中恢复——但没有运气。
不太确定如何进一步解决此问题。SYSTEM 日志中经常出现一个明显相关的错误,来自 DCOM 的事件 ID 10010:
The server {A9E69610-B80D-11D0-B9B9-00A0C922E750} did not register with DCOM
within the required timeout.
但我不确定这是否真的能提供额外的信息,或者这是否只是 IISAdmin 无法启动的另一个警告。
否则,事件日志几乎没有帮助。隔离并修复此问题的下一步是什么?我应该指出,我没有经常重启这个服务器的奢侈——它是一个应用服务器,依赖应用的用户工作到深夜,我需要在现场重新启动这是因为它并不总是可靠地重新启动——但我通常在异地工作。
因此,如果有任何方法可以继续调查而无需重新启动,我很想听到它。
根据 winerror.h,0x80090006 表示“NTE_BAD_SIGNATURE”,它是从 Win32 API 调用“CryptVerifyMessageSignature”返回的,表示“消息的签名未被验证”。在我看来,与 iisadmin 启动相关的某些文件的加密签名检查失败。
我会考虑做一个“SFC /SCANNOW”来看看你是否可以替换搞砸的文件,假设系统文件检查器可以访问一些 Windows 安装文件,并假设它是一个搞砸的文件。(是的——“搞砸”是一个技术术语。对我来说听起来比“腐败”更好。腐败?文件是在收受贿赂吗?)
如果您在“SFC /SCANNOW”之后没有让它工作,我可能会启动“进程监视器”并查看正在加载的文件。将生成大量日志条目,但您可能会在大海捞针中找到针。
鉴于这台机器发生了硬关机并出现了一些文件系统损坏,我会把钱花在“SFC /SCANNOW”上,以查找一个或多个损坏的文件。
旁白:所以,它不会可靠地重新启动,是吗?给我一个“网站已关闭!” 有种感觉……(不要重启网络服务器!!!!!!嘿嘿……)
只需从添加/删除程序 > Windows 组件重新安装 IIS。我之前在 Windows 2003 服务器上安装过它,并且不必重新启动。