1

我们有一个应用程序,它使用多个进程外 COM 对象来执行各种任务。如果用户在我们的应用程序运行时告诉 Windows 关闭,那么它会向所有应用程序(顶级窗口)发送关闭通知,但是 OoP COM 对象可以在通知父级之前关闭并有机会干净地关闭,导致不同组件中的各种错误。

这使情况变得更糟,因为创建了一个 OoP 对象来托管不稳定的第 3 方对象,因此它在崩溃时会自动重新启动,而现在由于 Windows 正在关闭而无法重新启动。

虽然我们可以处理父进程上的错误,但 ActiveX 主机是否有办法告诉 Windows“我还没有关闭,但会在适当的时候关闭”,或者更好的是,让 Windows 不通知它们第一名?

父进程、OoP 对象及其宿主都是 C++ 和 VB6 的混合体。

4

1 回答 1

3

有几种方法可以做到这一点。您的 OOP 服务器可以忽略关闭请求,依赖于客户端关闭并删除所有引用计数。您可能确实想设置一个标志,以便您知道在释放最后一个对象时立即关闭,服务器通常会保持运行一段时间。

或者您可以在 OOP 服务器中调用SetProcessShutdownParameters() 。传递从 GetProcessShutdownParameters() 获得的级别减 1,以便客户端始终在服务器之前获得关闭通知。也适用于没有隐藏顶层窗口的 OOP 服务器来获取 Windows 消息。

于 2012-03-02T14:04:14.387 回答