醉卧沙场君莫笑 古来征战几人回
RSS icon Email icon Home icon
  • 重装com+

    Posted on 三月 25th, 2009 admin No comments

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

    Leave a reply