Я написал приложение C # NET (консольное приложение, которое запускается как служба), которое управляет процессом Java (игровой сервер Minecraft), а наше приложение Web Panel управляет моим приложением.Когда процесс Java останавливается, мое приложение останавливается, а когда мое приложение останавливается, оно останавливает процесс Java.
Проблема, с которой я сталкиваюсь, заключается в том, что я развернул программное обеспечение на всех наших машинах после обширного тестирования на наличие ошибок., но, кажется, есть ошибка, которую мы пропустили, когда это НЕ останавливало процесс Java иногда.Эта ошибка ужасна, так как веб-программа пытается запустить мое приложение, мое приложение пытается запустить процесс 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,Я не могу воспроизвести локально.