Temos um aplicativo de ERP legado que precisamos manter por mais 6 meses. O aplicativo ERP foi escrito em FoxPro, um produto Microsoft descontinuado. O ambiente FoxPro é single-threaded por design e não pode ser estendido para ser multi-threaded. Por extensão, qualquer programa escrito no idioma do FoxPro também será inerentemente single-threaded; o aplicativo de ERP "falsifica" a segmentação, fazendo o processamento de uma única janela por vez, usando qualquer janela que tenha o foco. Embora possamos modificar o software (ele vem com o código-fonte) não existe agora nem nunca haverá um método para multithreading com segurança de um programa FoxPro,
O aplicativo está sendo executado em uma instalação do Server 2012r2 usando Citrix para serviços de terminal; enquanto o fornecedor do aplicativo ERP recomenda a execução do Server 2008 / 2008r2, não é possível executar 2008 como
O aplicativo não é publicado, apenas a área de trabalho.
Com esse pano de fundo fora do caminho, o problema é simples: o aplicativo está "desconectando" aleatoriamente, desaparecendo da sessão do usuário. Não há diálogo de erro fatal, não há mensagem de falha, não há nada. Ele simplesmente desaparece. Eu consegui rastrear isso para o aplicativo não responder por longos períodos de tempo, que para o FoxPro é realmente normal; Quando você executa uma consulta grande no idioma, o interpretador pode parar de responder por dezenas de segundos. Aparentemente 2012R2 acredita que o FoxPro caiu como resultado e fecha automaticamente o programa. Este não é um comportamento desejado, queremos que o aplicativo complete suas consultas de longa duração e retome a operação normal.
Essa suposição é suportada por entradas de log de eventos (sanitizadas) como esta:
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:
Como podemos obter o Servidor 2012r2 para NÃO fechar automaticamente um aplicativo legado em um curto período de tempo porque ele parece estar "congelado" quando está ocupado?
Encontrei as seguintes entradas do registro, mas nenhuma delas parece se aplicar à situação (a menos que, é claro, uma delas realmente funcione, mas a MS mais uma vez falhou em documentá-la completamente, não como se isso não tivesse acontecido antes ):
WaitToKillAppTimeout
WaitToKillServiceTimeout
HungAppTimeout
AutoEndTasks
FYI, só para que todos entendam os atrasos envolvidos, a consulta mais longa que tive que executar no FoxPro foi de aproximadamente 8 minutos. Portanto, seja qual for a resposta, deve acomodar a possibilidade de nenhuma resposta por até 8 minutos.