等待Windows COM服务器应用程序启动并初始化

时间:2019-12-17 13:22:35

标签: windows com

我们有一个应用程序(用C ++编写),该应用程序实现Windows COM(如DCOM / Automation)服务器。

在功能测试环境中,我们使用COM接口实例化机制来获取服务器接口类型的对象,以便自动测试事物。

C#代码:

SomeComInterfaceType object = new SomeComObject();

有许多这样运行的测试,在每个测试之间,我们在启动下一个测试之前再次杀死COM服务器进程。 这在全球范围内都可以使用,但是有时测试会失败,但此类异常除外

  

System.Runtime.InteropServices.COMException:呼叫被拒绝   被呼叫者。 (来自HRESULT的异常:0x80010001(RPC_E_CALL_REJECTED))

搜索此错误仅产生零星的信息,据称这可能是由于COM服务器尚未充分初始化而无法处理请求而发生的。 (通常包含自动执行WORD或EXCEL的示例) 人们似乎可以解决该问题的方法是在进行COM调用之前先等待/睡眠一段时间。 这会很烦人,因为它会大大降低测试速度。

所以我想知道是否有更健壮的方法来避免这些问题。

是否可以通过某种系统调用来检查COM服务器是否已启动并正确初始化? 等同于Process.WaitForInputIdle,但是对于基于COM服务器的对象吗? 请注意,我无法轻松获取我的COM服务器的进程ID。 (如Get Process ID of COM Server中的要求。)

0 个答案:

没有答案