【发布时间】:2011-08-02 07:13:57
【问题描述】:
我编写了一个管理 Java 进程(Minecraft 游戏服务器)的 C# NET 应用程序(作为服务运行的控制台应用程序),而我们的 Web 面板软件管理我的应用程序。当 Java 进程停止时,我的应用程序会自行停止,当我的应用程序停止时,它会停止 Java 进程。
我遇到的问题是,我在进行了广泛的错误测试后将软件部署到了我们所有的机器上,但似乎我们错过了一个错误,它有时不会关闭 Java 进程。这个错误很可怕,因为 Web 软件尝试启动我的应用程序,我的应用程序尝试启动 Java 进程,但由于它无法 IP 绑定而失败(因为旧进程保持打开状态),我们最终得到 15-30 个错误Java 进程正在运行。
- 我正在使用 CurrentDomain_UnhandledException 来捕获应用程序的崩溃并调用 TerminateProcess()。
- 我正在使用 CtrlTypes.CTRL_C_EVENT 和 CtrlTypes.CTRL_CLOSE_EVENT 来检测我的应用程序正在关闭,这也调用了 TerminateProcess() 函数。
以下两种方法我都试过了……
static void TerminateProcess()
{
log.LogMessage("Minecraft Process Shutdown.");
SendProcessCmd("stop");
}
和
static void TerminateProcess()
{
log.LogMessage("Minecraft Process Shutdown.");
minecraftProcess.Kill();
}
但是,我似乎错过了关闭 C# 应用程序的另一种方式,因为这两种方式似乎都会让 Java 进程每隔一段时间运行一次,而我无法在本地重现。
【问题讨论】:
-
你的意思是 log.LogMessage("Minecraft Process Shutdown.");不叫?也许服务包装器有问题?相反,将您的应用程序修改为既是服务又是控制台
-
它似乎总是被调用,但似乎并不总是停止该过程。您能解释一下服务和控制台的含义吗?