在会话0(服务会话)中运行应用程序时LoadTypeLibEx失败

时间:2014-04-22 11:46:26

标签: visual-c++ sessionid

在我的应用程序中,我正在加载一个类型库,如下所示

ITypeLib *typelib = NULL;

tlbpath = "some path"

hr = LoadTypeLibEx(tlbpath ,REGKIND_REGISTER,&typelib);

hr = RegisterTypeLibForUser(typelib,tlbpath,NULL);

当我以管理员/用户身份运行时,我可以加载tlb并将所有条目加载到注册表中。

当我在会话0中通过服务运行相同的应用程序时,我在加载typelib时收到TYPE_E_CANTLOADLIBRARY错误。

此外,UnRegisterTypeLibForUser是否会删除使用LoadTypeLibEx创建的所有条目。

在我的情况下UnRegisterTypeLibForUser执行正常,但条目没有在注册表中删除。

我使用下面的代码:

UnRegisterTypeLibForUser(tlibatr->guid,tlibatr->wMajorVerNum,tlibatr->wMinorVerNum, LOCALE_NEUTRAL, SYS_WIN32);

在会话0中运行应用程序时,是否可以告诉LoadTypeLibEx无法注册的原因以及如何修复它?

1 个答案:

答案 0 :(得分:0)

我解决了我的问题。

我给出了tlb的虚拟驱动器路径而不是系统路径。 即X:.... \ vlt.tlb而非E:.. \ XRoot ... \ vlt.tlb

所以在会话0中,我们需要提供系统路径。

感谢Hans Passant。

任何人都可以告诉为什么UnRegisterTypelibForUser不会删除注册表中的条目?