1

我目前正在尝试编写一个 Windows 窗体应用程序(在 C# 中),它可以启动和停止多个 Java 进程(使用参数来运行特定的 jar 文件)。

我开始每个过程都没有问题;但是我需要找到一种方法让应用程序在退出时关闭所有这些应用程序,无论采用哪种方式(作为未知数量的 java 进程),我都在一个单独的工作线程中运行,以避免占用主线程同时应用程序正在运行(并捕获进程输出)。

我看过这个:关闭应用程序时关闭另一个进程

但它似乎不适用于我的目的(它不会关闭进程)。

4

2 回答 2

1

它似乎不适用于我的目的..(它不会关闭进程)。

但它有什么作用?它是否至少关闭了 Java 窗口?您的 Java 应用程序甚至窗口吗?

一般来说,

  1. 如果可能(即如果您自己构建 Java 应用程序),您应该在您的 C# 和 Java 应用程序之间建立一个机制,以优雅地通知 Java 应用程序关闭(套接字等)
  2. 否则,您仍然可以通过发送 WM_CLOSE来优雅地关闭 Java 应用程序(如果它们是图形应用程序)。这就是Process.CloseMainWindow/Process.Close您尝试(但失败)的方法所做的。如果您的 Java 应用程序是控制台应用程序,您可以尝试关闭其/它们的标准输入和/或进行模拟^C
  3. 最后,当所有其他方法都失败时,使用Process.Kill来终止您的 Java 子进程——不优雅。您可能希望您的控制进程首先尝试上面的 1. 或 2.,等到所有子进程都已退出或直到经过很短的时间(例如 3 秒),然后才继续Process.Kill处理尚未退出的任何进程.
于 2012-11-18T18:06:43.540 回答
0

procrss.killKill 方法是使进程以暴力和迅速的方式结束的极好方法。Kill 方法可以抛出一些异常。但它通常不会而且通常会实现你想要的目标——介于冷血谋杀和快速无痛处决之间。

于 2012-11-18T18:12:32.233 回答