从Win XP移植到Win7时“创建COM组件实例失败”

时间:2012-09-11 10:19:35

标签: c# windows-7 windows-xp

我开发了一个带有线程的C#应用​​程序,可将word转换为pdf 此应用程序在Win XP与Office 2007中工作正常。但在Win7上使用Office 2010时,它会引发错误:

  

由于以下错误,从IClassFactory创建具有CLSID {00020906-0000-0000-C000-000000000046}的COM组件实例失败:8001010a。

你能告诉我如何让Win7运行我的应用程序吗?

1 个答案:

答案 0 :(得分:3)

错误代码0x8001010a是RPC_E_SERVERCALL_RETRYLATER,“调用的对象选择不立即处理该调用。稍后再试。” Office应用程序并不罕见。你应该睡一会儿然后再试一次。

这不是非常实用,使用最强烈的轻描淡写。最终,它是由您在代码中使用线程引起的。 Office对象是单线程的。您当然可以在工作线程上进行方法调用,但COM会自动封送对创建该对象的STA线程的调用。基本上消除了多线程的所有优点。如果您创建自己的STA线程以避免这种情况,那么编组将在Office应用程序内完成。

这就是降压停止的地方,如果你打电话并且应用程序还没准备好执行该方法,因为它正在忙着做其他事情(通常用你之前要求它做的任何事情)那么它会拒绝使用此错误代码调用。当你得到错误的时候非常难以预测,版本更改当然有资格获得不同的行为。你必须降低代码中的线程,以避免严重抨击它。

或者实现IMessageFilter接口并告诉COM您的程序可以挂起,并且它应该继续等待,直到Office应用程序准备好处理该呼叫。 This Q+A谈论它。

相关问题