如何暂停最顶级的流程? (解决方案最好在c#中)

时间:2011-03-17 16:42:52

标签: .net process

我将应用程序编写为主机应用程序之上的模块。让我们调用主机应用程序进程A和我的应用程序进程B.进程B与进程A处于子进程关系。从进程B开始,我启动另一个进程,称为C,当进程C运行时,我想要暂停A和B.要从B启动C,我使用Process类,然后阻止B调用WaitForExit()。但是如何阻止A.同样,当C正在运行时A和B应该被暂停。

主机应用是第三方应用,因此我只能通过API访问。我正在考虑获取进程'B父进程(即A)以及A中的每个线程调用它的Suspend()方法,但此方法已过时。实现目标的优雅方法是什么?

我的主机应用是SAP B1。

1 个答案:

答案 0 :(得分:1)

不推荐使用.NET Thread.Suspend()方法。这不是你想要做的,你试图暂停一个可能甚至不是托管的进程。无论哪种方式,您都会调用Windows SuspendThread()函数。这需要线程句柄,从OpenThread()获取。这需要线程ID,你可以从.NET的ProcessThread获得。

这是一个相当大的锤子,你应该避免摆动。只是禁用应用程序的主窗口(EnableWindow API函数)应该足够,而且随机性要小得多。无论哪种方式都需要本机API技能,请访问pinvoke.net以获取所需的声明。