C# 中 VisualFoxPro 应用程序的 Quit() 问题

Trouble with Quit() on VisualFoxPro Application within C#

我创建了一个 WebAPI 网络服务,它接受来自旧版 Visual FoxPro 系统的请求。该服务需要解析请求,然后启动 VFP 运行时,以便执行一些遗留 FoxPro 代码来实际 "process" 请求。

我有一些这样的代码:

try{
    foxApp = new VisualFoxpro.FoxApplication();
    foxApp.DoCmd(@"do hqinit with .T.");
    ...
    foxApp.DoCmd("close all");
    foxApp.DoCmd("release all");
    foxApp.Quit();
}
catch{
        ...
}

foxApp.Quit() 不断抛出错误,FoxPro 应用程序仍然存在 运行(我可以在任务管理器中看到它)。

基于this SO post,我尝试了以下方法:

try{
    foxApp = new VisualFoxpro.FoxApplication();
    ...

    while(System.Runtime.InteropServices.Marshal.ReleaseComObject(foxApp) > 0) {}

但是,虽然我不再遇到尝试 foxApp.Quit() 时遇到的错误,但每次调用 Web 服务后 VFP 应用程序仍然存在 运行。

如何确保 VFP 在每个 Web 请求结束时关闭?

更新

我刚刚再次测试并意识到第一个代码块没有抛出错误。相反,它只是挂起服务器。但是,如果我在 foxApp.Quit() 之前添加 foxApp.DoCmd("clear all"),我会收到一条错误消息:

Cannot clear the object OPANEBROWSER because it is in use.

None 我的代码引用了一个 OPANEBROWSER 对象,有些我不确定它来自哪里。

知道了!

我已经在服务器上安装了 VFP9.0 SP2,从技术上讲,我正在启动应用程序本身。在我的开发环境中,我总是禁用 MS 默认弹出的任务管理器窗格。但是,我没有在服务器VFP环境下这样做过。

一旦我在 VFP 环境中禁用任务管理器,使其不会在 VFP 启动时显示,一切都很好。