使用Skype Lync SDK调用AddConversation触发Generic COM Exception(0x8002802B)求助
解决Lync SDK调用时的0x8002802B COM异常
这个错误码0x8002802B对应的是TYPE_E_LIBNOTREGISTERED,本质是Lync的COM组件库没有被正确注册,或者你的应用和Lync客户端的运行状态不兼容。下面是一步步的排查和解决方法:
1. 确认Skype for Business客户端正在运行并已登录
LyncClient.GetClient()依赖本地已启动并登录的Skype for Business客户端实例,如果客户端没打开,或者处于未登录状态,就会触发这个COM异常。先手动启动客户端并完成登录,再测试你的代码。
2. 匹配Lync SDK和客户端的版本
SDK和客户端版本必须严格对应:
- Lync 2013 SDK → 对应Lync 2013客户端
- Skype for Business 2016 SDK → 对应Skype for Business 2016/Office 365客户端
版本不兼容会导致COM接口无法正常识别,建议卸载不匹配的SDK或客户端,安装对应版本。
3. 重新注册Lync的核心COM组件
以管理员身份打开命令提示符,根据你的Office版本执行注册命令:
- Office 2013(Lync 2013):
regsvr32 "C:\Program Files (x86)\Microsoft Office\Office15\UC.dll" - Office 2016/365(Skype for Business):
regsvr32 "C:\Program Files (x86)\Microsoft Office\Office16\UC.dll"
执行后如果提示“DllRegisterServer在UC.dll已成功”,说明注册完成。
4. 强制应用以32位模式运行
Skype for Business客户端是32位程序,即使在64位系统上,Lync SDK也只能在32位进程中正常工作。在Visual Studio中设置:
右键项目 → 属性 → 生成 → 平台目标,选择x86,然后重新编译运行。
5. 检查运行权限
不要用管理员权限启动你的C#应用——Lync客户端通常是以普通用户身份登录的,跨权限的COM调用会被系统阻止,导致异常。用当前登录的普通用户身份运行应用即可。
代码优化建议
在调用Lync API前,先检查客户端状态,避免直接抛出异常:
if (!LyncClient.IsLyncRunning()) { MessageBox.Show("请先启动并登录Skype for Business客户端"); return; } try { LyncClient lyncClient = LyncClient.GetClient(); Conversation conversation = lyncClient.ConversationManager.AddConversation(); // 示例:添加参与者并发送消息 var participant = lyncClient.ContactManager.GetContactByUri("user@domain.com"); conversation.AddParticipant(participant); var instantMessageModality = (InstantMessageModality)conversation.Modalities[ModalityTypes.InstantMessage]; instantMessageModality.BeginSendMessage("测试消息", ar => { instantMessageModality.EndSendMessage(ar); }, null); } catch (LyncClientException ex) { Console.WriteLine($"错误详情:{ex.Message},错误码:0x{ex.ErrorCode:X8}"); }
内容的提问来源于stack exchange,提问作者Chetan Nikam
相关产品推荐
相关产品推荐

