Window "capture" 应用程序在意外终止时允许捕获的 windows 消失,我如何 prevent/fix 这个问题?

Window "capture" application, upon unexpected termination, allows captured windows to disappear, how can I prevent/fix this issue?

我有一个应用程序 (C# + WPF) 试图夺取对作为输入传递给它的任何进程的图形界面的控制权,并 resize/reposition 用于我自己的目的。

我认为它的工作做得相当好。在预期终止时(基础 class 继承自 IDisposable),"captured" 进程被释放 - 它的父进程被设置为原始进程,其 window 样式被重置,等等

事实上,在测试中,我可以捕获、释放、重新捕获等等,与我想要的 许多 次相同的过程没有问题。

然而,在意外终止时(比如另一个进程强行杀死它),该进程永远不会重新获得其图形界面!我可以告诉它仍然 运行 但我永远无法将该过程设置回其原始状态。

似乎该进程不再响应设置特定 window 功能的基于 window 的 Win32 API 调用(例如,我可以使用 GetParent 获取信息、GetWindowThreadProcessId 等,但调用 ShowWindow 或相关结果没有结果)。

关于为什么会发生这种情况有什么建议吗?我猜想因为我将进程的父进程设置为我的 WPF 应用程序(然后意外关闭),它在尝试恢复初始界面时会导致一些问题?

This 就是它发生的原因(或者至少说明了为什么我自己很难找到问题);我可以从中恢复吗?如果是这样,怎么做到的?

编辑 -

IInspectable 在评论中提出了一个很好的观点,问题经过调整以更适合这个特定的应用程序。

看来我找到答案了;因此,为了完整起见,我将 post 我在这里得到的内容,以防其他人遇到类似问题。

根据 IInspectable in here and here 提供的信息(评论中有更多上下文),我在这里尝试做的事情(分配一个新的父跨进程)似乎基本上是不受支持的行为。

我的解决方案:

恢复(至少在我所说的那个点——即意外崩溃或退出)可能是不可行的,因为我们已经在 undetermined/unknown 行为中结束了。所以我决定采取预防措施。

我们当前的项目已经使用 Nancy 框架在 servers/processes 之间进行通信,所以我要 "refine" 我们的程序部分的关闭程序有点让它更优雅地退出。

确实意外终止的情况下,我仍然不知所措。我 可以 只是重新启动进程(实际上是带有控制台输出的服务,在我们的例子中,但是 w/e)但是我的应用程序只是一个 GUI/Interface 而不是与这些过程所提供的功能相比非常重要。我可能会制作某种信号量文件,指示是否成功关闭并关闭我的代码,以便它指示进程在下次重新启动之前不再可见。