重装com+

三 25th, 2009

不知为何,给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也能正常安装了。

标签:
  1. Love
    十二 12th, 201116:40

    The registry to delete this clsid, found dcomcnfg interface can run out, but after some operations, or to enter an error. Can this be compatible on Mac?

    african mango

  2. Buy Facebook Fans
    十二 31st, 201111:12
    #2
*