我们有一个应用程序(用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中的要求。)