You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Progress 11.4会话崩溃后返回初始登录界面而非退出到OS如何解决?

解决方案

根因说明

返回登录界面的问题本质是Progress ABL会话默认会把中断、未捕获错误的执行上下文回退到启动时的入口程序(即登录界面程序),而非直接终止进程。之前放置的QUIT语句如果触发时处在嵌套执行上下文、或是被上层错误拦截逻辑覆盖,就不会生效。

可落地的处理方案

  • 优先全局拦截中断和错误事件,强制终止进程
    直接在登录程序的最开头注册全局中断、错误触发器,触发时直接调用Windows系统API终止整个进程,避免回到登录上下文,示例代码如下:
    /* 注册全局CTRL-PAUSE(对应ABL的CTRL-BREAK事件)触发器 */
    ON CTRL-BREAK ANYWHERE DO:
        RUN ForceQuit.
    END.
    
    /* 注册全局未捕获错误触发器 */
    ON ERROR ANYWHERE DO:
        RUN ForceQuit.
    END.
    
    PROCEDURE ForceQuit:
        /* 优先清理所有持久化过程、窗口资源 */
        FOR EACH _P WHERE _P._PERSISTENT = YES:
            DELETE PROCEDURE _P._HANDLE.
        END.
        /* 调用Windows系统API直接终止进程,优先级高于Progress自带的QUIT */
        PROCEDURE ExitProcess EXTERNAL "kernel32.dll":
            DEFINE INPUT PARAMETER uExitCode AS LONG NO-UNDO.
        END PROCEDURE.
        RUN ExitProcess(0).
    END.
    
  • 检查启动参数与程序上下文配置
    1. 确认启动Progress客户端的命令行没有添加-p 登录程序名之外的特殊自动重启参数,也没有配置启动后自动循环执行登录程序的逻辑
    2. 确认登录程序调用主程序后,没有保留登录程序的持久化实例,也没有在主程序退出后加重启登录界面的分支逻辑
  • 替换原有QUIT语句的调用位置
    如果不想调用系统API,可以把所有需要退出的场景下的QUIT替换为QUIT 1,同时在客户端启动命令行添加参数-errorlevel 2,确保会话出错时直接终止进程而非回退到入口程序。

内容的提问来源于stack exchange,提问作者Adam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 04:27:00