【问题标题】:Handling Windows shutdown with out of process ActiveX EXEs处理带有进程外 ActiveX EXE 的 Windows 关闭
【发布时间】:2012-03-14 23:03:30
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您是否拥有 ActiveX EXE 的代码?
  • 是的,一个是带有ATL的C++,另一个是VB6项目

标签: winapi com activex shutdown out-of-process


【解决方案1】:

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

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

【讨论】:

  • 嗯,听起来很有趣,我认为我们无法访问顶级窗口,但我稍后会和他们一起玩。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多