Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何挂起最顶层的进程?(溶液最好是c#)_.net_Process - Fatal编程技术网

.net 如何挂起最顶层的进程?(溶液最好是c#)

.net 如何挂起最顶层的进程?(溶液最好是c#),.net,process,.net,Process,我将应用程序作为一个模块写在主机应用程序之上。让我们调用主机应用程序进程A和我的应用程序进程B。进程B与进程A有子关系。我从进程B启动另一个进程,称之为C,当进程C运行时,我希望A和B被挂起。要从B启动C,我使用Process类并阻止B调用WaitForExit()。但是如何也阻止A。同样,当C运行A和B时,应该暂停 主机应用程序是第三方应用程序,所以我只能通过API访问。我曾考虑过获取进程B的父进程(即A)以及调用它的Suspend()方法中的每个线程,但是这个方法已经过时了。实现目标的优雅方

我将应用程序作为一个模块写在主机应用程序之上。让我们调用主机应用程序进程A和我的应用程序进程B。进程B与进程A有子关系。我从进程B启动另一个进程,称之为C,当进程C运行时,我希望A和B被挂起。要从B启动C,我使用Process类并阻止B调用WaitForExit()。但是如何也阻止A。同样,当C运行A和B时,应该暂停

主机应用程序是第三方应用程序,所以我只能通过API访问。我曾考虑过获取进程B的父进程(即A)以及调用它的Suspend()方法中的每个线程,但是这个方法已经过时了。实现目标的优雅方式有哪些


我的主机应用程序是SAP B1。

只有.NET Thread.Suspend()方法不推荐使用。这不是您在这里想要做的,您正在尝试挂起一个甚至可能不是托管进程的进程。不管是哪种方式,您都需要pinvoke Windows SuspendThread()函数。这需要线程句柄,请从OpenThread()获取该句柄。这需要线程ID,您可以从.NET的ProcessThread获取该ID


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

我并不是说没有任何解决方案,但我怀疑它们中的任何一个都不会很优雅。你想做的本来就是丑陋的。也许吧,但我别无选择。