У нас есть устаревшее приложение ERP, которое нам нужно продолжать работать еще 6 месяцев. Само приложение ERP было написано на FoxPro, продукте Microsoft, выпуск которого прекращен. Среда FoxPro является однопоточной по дизайну и не может быть расширена до многопоточной. Таким образом, любые программы, написанные на языке FoxPro, также будут по своей сути однопоточными; приложение ERP «имитирует» многопоточность, выполняя обработку для одного окна за раз, используя любое окно, имеющее фокус. Пока мы можем модифицировать программное обеспечение (оно идет с исходным кодом) сейчас нет и никогда не будет метода для безопасной многопоточности программы FoxPro, предлагаемый способ решения аналогичной проблемы в Stackoverflow. Это не проблема, которую можно решить программированием.
Приложение запускается на установке Server 2012r2 с использованием Citrix для терминальных служб; хотя поставщик приложения ERP рекомендует использовать Server 2008 / 2008r2, запускать 2008 как
Приложение не публикуется, только рабочий стол.
Если убрать этот фон, проблема проста: приложение случайным образом «вылетает», исчезает из сеанса пользователя. Нет диалогового окна о фатальной ошибке, нет сообщения о сбое, нет ничего. Он просто исчезает. Мне удалось отследить это до того, что приложение не отвечает в течение длительного периода времени, что для FoxPro на самом деле нормально; когда вы запускаете большой запрос на языке, интерпретатор может перестать отвечать на десятки секунд. По-видимому, 2012R2 считает, что в результате произошел сбой FoxPro, и автоматически закрывает программу. Это нежелательное поведение, мы хотим, чтобы приложение завершило свои длительные запросы и возобновило нормальную работу.
Это предположение подтверждается (очищенными) записями журнала событий, такими как:
The program XXXX.exe version 0.0.0.0 stopped interacting with Windows and was closed. To see if more information about the problem is available, check the problem history in the Action Center control panel.
Process ID: 3810
Start Time: 01d1c0d181b3e14e
Termination Time: 4294967295
Application Path: \\{server}\{ERP share}\{ERP install directory}\XXXX.exe
Report Id: 1a2c27bb-2cd5-11e6-80f2-141877520cd8
Faulting package full name:
Faulting package-relative application ID:
Как заставить Server 2012r2 НЕ закрывать автоматически устаревшее приложение за короткий период времени, потому что оно кажется «замороженным», когда оно просто занято?
Я нашел следующие записи в реестре, но ни одна из них, похоже, не применима к ситуации (если, конечно, одна из них действительно не работает, но MS снова не смогла полностью ее документировать, не так, как этого не происходило раньше):
WaitToKillAppTimeout
WaitToKillServiceTimeout
HungAppTimeout
AutoEndTasks
К вашему сведению, чтобы все понимали связанные с этим задержки, самый продолжительный запрос, который мне приходилось выполнять в FoxPro, составлял примерно 8 минут. Таким образом, какой бы ни был ответ, он должен учитывать возможность отсутствия ответа в течение 8 минут.