XBAP使用非托管c ++ COM服务器,并排部署问题

时间:2009-10-27 19:35:21

标签: com manifest xbap side-by-side clsid

我面临以下情况: 我创建了一个简单的完全信任XBAP应用程序,它引用了非托管c ++ COM服务器(隔离)。

部署之后,我希望XBAP应用程序能够发现放在同一目录中的COM服务器dll,但事实并非如此。 我收到以下错误:

调用目标抛出了异常。 ---> System.Runtime.InteropServices.COMException(0x80040154):由于以下错误,检索具有CLSID {970599E0-2673-11D3-A8A8-00105AA943DF}的组件的COM类工厂失败:80040154。    在Generation888.Generation888.Simple(Int32 num1,Int32 num2)

我验证了部署XBAP的文件夹包含包含正确CLSID的DLL和XBAP清单

如果我创建了一个简单的C#Windows窗体应用程序并且引用了相同的COM dll,它可以正常工作。

我的问题是XBAP支持Side-by-Side机制。

由于

1 个答案:

答案 0 :(得分:1)

我对XBAP并不十分熟悉,所以这些是一些一般性的建议。 如果您的XBAP实际上是作为单独的可执行文件启动的,因为它是完全信任的(taskmgr说的是什么?),请尝试在Windows Vista或更高版本的提升命令行中使用“sxstrace.exe”工具来确定XBAP清单是否实际由系统解释。如果您第一次尝试没有清单或更改清单的应用程序,系统可能会缓存此旧信息,您需要通过触摸清单和可执行文件的时间戳来清除此清单状态缓存。

您的可执行文件也可能具有嵌入式清单,这意味着将忽略外部清单。要检查此项,请在Visual Studio中打开可执行文件,并查看它是否具有ID为1的RT_MANIFEST资源。