不知为何,给xp装iis发现装不了。装到一半安装界面死了,重启依旧。
换作普通人,此时只能重装系统了。没办法,谁让我是IT民工,拿出windbg慢慢调。发现创建一个com+对象时,进入NtRequestWaitReplyPort后死等了。猜是com+问题,好像我以前禁用过com+。
运行 dcomcnfg,其界面直接死掉。晕,再调,发现还是这个com+对象的问题,写段小程序验证,一样是死锁:
CoInitialize(0);
CLSID clsid;
CLSIDFromString(L”{182C40F0-32E4-11D0-818B-00A0C9231C29}”, &clsid);
MULTI_QI qi = {0};
qi.pIID = &IID_IUnknown;
CoCreateInstanceEx(clsid, 0, CLSCTX_LOCAL_SERVER, 0, 1, &qi);
if (qi.pItf) qi.pItf->Release();
CoUninitialize();
可见的确是com+问题。注册表中删掉这个clsid,发现dcomcnfg可以运行出界面了,但进入后有些操作还是报错。启动msdtc就报错。
用msdtc -resetlog 重置log后,msdtc服务(Distributed Transaction Coordinator)可以启动了。原因是我曾经删掉了C:\WINDOWS\system32\MsDtc下的LOG文件。微软真TM搞笑,没有了LOG你直接创建不行吗,还要像模像样的搞个命令行参数重置LOG。多此一举。
但恢复备分的clsid发现还是出错,只能重装com+了:
- 去掉光驱和虚拟光驱里的光盘或映象。保证第2步不会被系统自动找回dll
- 删 C:\WINDOWS\system32\dllcache\clbcatq.dll
- 重命令 C:\WINDOWS\system32\clbcatq.dll 为其它名如 ~clbcatq.dll
- 删 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\COM3 键
- 重启系统
- 删目录 c:\windows\Registration
- 复制 c:\windows\inf\sysoc.inf 到 c:\sysoc.inf,打开c:\sysoc.inf,找到com=那一行,去掉hide字样
- 运行命令: sysocmgr /y /i:C:\sysoc.inf ,可以看到com+并发现已经被勾选。直接点下一步安装com+。安装成功。
- 运行dcomcnfg检查是否真的成功。
- 重启系统。
OK, 这样com+就正常了,iis也能正常安装了。