Quando diz windows server, isso significa via terminal service ou direto nele?
Como tenho (nem sei direito se ainda tenho) cliente usando terminal service, notei diferenças na GTWVG, e no ADO.
Por exemplo:
Numa máquina comum, o retorno de consulta sem conteúdo é Nil, uma variável contendo NADA.
Já em terminal service, o retorno é um recordset sem conteúdo, o que é diferente de Nil, é uma variável contendo um recordset vazio.
O programa que o Windows diz travado, não é exatamente travado, é porque o Windows não está recebendo resposta do programa.
Isso pode acontecer se o programa estiver trabalhando, e não existir tratamento de eventos para essa situação.
Num teste básico com GTWVG, que tem janela Windows:
isso acima, vai causar essa mensagem no Windows.
Isso acima não vai causar a mensagem, porque durante o processamento de Inkey() vai existir a tal "conversa com o Windows".
Em LIBs GUI, que não tem o Inkey(), geralmente tem o DoEvents() ou algo parecido, pra que isso não aconteça.
Então... pode ser alguma rotina sua, ou interna, que não está preparada pra alguma das situações acima.
Vai ter que acompanhar o passo a passo do encerramento, pra tentar identificar aonde está seu problema.
Pode colocar pontos de aviso, como já foi mostrado, pra ir reduzindo o bloco/rotina a ser pesquisado.