重装com+

不知为何,给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+了:

  1. 去掉光驱和虚拟光驱里的光盘或映象。保证第2步不会被系统自动找回dll
  2. 删 C:\WINDOWS\system32\dllcache\clbcatq.dll
  3. 重命令 C:\WINDOWS\system32\clbcatq.dll 为其它名如 ~clbcatq.dll
  4. 删 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\COM3 键
  5. 重启系统
  6. 删目录 c:\windows\Registration
  7. 复制 c:\windows\inf\sysoc.inf 到 c:\sysoc.inf,打开c:\sysoc.inf,找到com=那一行,去掉hide字样
  8. 运行命令: sysocmgr /y /i:C:\sysoc.inf ,可以看到com+并发现已经被勾选。直接点下一步安装com+。安装成功。
  9. 运行dcomcnfg检查是否真的成功。
  10. 重启系统。

OK, 这样com+就正常了,iis也能正常安装了。

此条目发表在日经分类目录。将固定链接加入收藏夹。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

*