【问题标题】:How can I tie together the lifetime of two processes in C#?如何在 C# 中将两个进程的生命周期联系在一起?
【发布时间】:2021-03-22 19:28:35
【问题描述】:

我有一个在 C# 中实例化两个不同进程的应用程序。让他们成为 A 和 B。

通常,启动 A 会启动 B。由于特定版本的产品错误,对于该错误版本,我需要使用一种解决方法,即首先启动进程 B,然后在其之上处理 A。

在功能方面一切正常,但关闭 A 不会以这种方式关闭 B。因为当A进入时B最终没有窗口,所以关闭A后它不能很好地关闭(如果可以,我不会有这个问题)并且必须用任务管理器杀死。

有什么方法可以将两个 C# Process 对象绑定在一起,这样关闭 A 就会触发关闭 B?

注意:在我正在编写的应用程序中杀死它们不是一个选项,因为用户必须决定何时关闭 A & B 合奏

【问题讨论】:

  • 您是在编译后的代码中解决这个问题,还是在调整“批处理”文件启动器进程以让 B 先启动。
  • @SqlSurfer 编译代码。 Process 实例化 .exes 的对象
  • 如果 B 在 A 正在关闭时应该始终关闭,而不是向 B 添加代码,如果它没有看到 A 运行超过 10 秒,它会自行关闭。如果您必须将实例绑定在一起,而不是使用命令行参数或进程 ID 来了解启动另一个进程的那个“拥有”哪个。实际上使 A 和 B 都聪明。顶部的“窗口”句柄或进程 ID 可用作将它们联系在一起的 ID。我会研究一个管理所有这些的进程 C。 (详细信息 - .NET “经典”和 .NET 核心在启动进程时的行为略有不同。)

标签: c# process desktop-application


【解决方案1】:

您可以使用进程间通信技术和类,如命名系统互斥锁、EventWaitHandle、套接字等。可以在另一个stackoverflow page 上找到非常相似的问题和解决方案

public EventWaitHandle (bool initialState, System.Threading.EventResetMode mode, string? name, out bool? createdNew);

名称 细绳 名称,如果要与其他进程共享同步对象;否则为 null 或空字符串。名称区分大小写。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 2013-04-06
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多