有一个32 位的DCOM(包括代理/桩子)想在 64 位 win7 上安装,结果在 MMC comexp.msc /32 中没有看到。
而且client程序也不能正常运行,::CoCreateInstance 返回 REGDB_E_BADTHREADINGMODEL,但是手工启动DCOM程序,client还是可以正常调用该DCOM的。安装代码是 C++的:
BOOL InstallComServer(const char * modulePath, REFGUID lib_guid)
{
BOOL ret = FALSE;
wchar_t module[512];
HRESULT hr = S_OK;
CComPtr<ITypeLib> tmp;
DWORD dw = 0; wsprintfW (module, L"%hs", modulePath);
 
UnRegisterTypeLib (lib_guid, 1, 0, 0, SYS_WIN32); hr = LoadTypeLib (module, &tmp);
if(!SUCCEEDED(hr)){
dw = hr;
printf("LoadTypeLib failed <%x>\n", dw);
goto DONE;
}

hr = RegisterTypeLib (tmp, module, 0);
if(!SUCCEEDED(hr)){
dw = hr;
printf("RegisterTypeLib failed <%x>\n", dw);
goto DONE;
} ret = TRUE;DONE: return ret;
}BOOL UninstallComServer (REFGUID lib_guid)
{
BOOL ret; if (UnRegisterTypeLib (lib_guid, 1, 0, 0, SYS_WIN32) != S_OK){
return FALSE;
}else{
ret = TRUE;
}
  
return ret;
}