#c# #.net #windows #.net-core #process
Вопрос:
Моя цель-изолировать выполнение некоторого кода для NET Core.
- У меня есть консольное приложение № 1 (родительское?), которое запускает процесс для другого консольного приложения № 2 (дочернего?), которое, в свою очередь, запускает динамически скомпилированный код.
- Выполнение этого кода может привести к фатальной ошибке, например, исключению OutOfMemoryException.
- Когда это произойдет, приложение № 1 выйдет из строя вместе с приложением № 2.
Есть ли способ спасти приложение № 1 от сбоя приложения № 2?
Может быть, я что-то неправильно понимаю, но я думал, что они должны быть совершенно отдельными. Пожалуйста, помогите. Также буду признателен за решение для NET Framework, если таковое имеется.
ProcessStartInfo processStartInfo = new ProcessStartInfo(filePath, processArgs)
{
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true
};
using (Process process = new Process()
{
StartInfo = processStartInfo,
EnableRaisingEvents = true
})
{
process.Start();
process.WaitForExit();
return process.StandardOutput.ReadToEnd();
};
Комментарии:
1. Что именно происходит в родительском процессе при сбое дочернего процесса? ФУ, я бы также ожидал, что они будут независимыми.
2. Как насчет попытки поймать исключение, вызванное потоком № 2 в потоке № 1?
3. @500-Ошибка внутреннего сервера, оба приложения разбиваются, и я получаю всплывающее окно Windows о сбое.
4. @T. Трасудейн, вы предлагаете запустить приложение № 2 из другого потока?
5. Что там написано?
Ответ №1:
Таким образом, достаточно завершить код дочернего приложения. Родительское приложение продолжает свою работу даже после OutOfMemoryException
того, как, StackOverflowException
, AccessViolationException
в дочернем приложении.
Просто нужно иметь в виду, что дочернему приложению может потребоваться некоторое время, чтобы полностью освободить ресурсы, которые оно использовало после сбоя, поэтому некоторые из них все еще могут быть заблокированы в родительском приложении.
Спасибо, ребята, что открыли глаза!