【问题标题】:Why doesn't FoxPro release my APP file?为什么 FoxPro 不发布我的 APP 文件?
【发布时间】:2012-03-14 03:13:05
【问题描述】:

我正在将旧 FoxPro 应用程序移植到 Visual FoxPro。旧程序当然没有使用任何类,但我已经开始在某些情况下使用它们。这导致了我在任何地方都没有提到的开发周期中的问题。

基本上,如果我根据过程文件中定义的类创建一个对象,那么 FoxPro 永远不会放过我的 APP。我无法删除或重建它,每次更改都必须重新启动 VFP。

重现的步骤。用

制作a.prg
SET PROCEDURE TO b
m.test1 = CREATEOBJECT('TestClass')
RELEASE m.test1

并使用b.prg

DEFINE CLASS TestClass AS Control
ENDDEFINE

创建一个名为a的项目:

MODIFY PROJECT a

并添加程序a.prg。那么

BUILD APP a FROM a
DO a.app
DELETE FILE a.app

最后一行会给出

Application file 'c:\...\b.fxp' is not closed

然后如果你再次尝试DELETE,它会说

File access is denied c:\...\a.app

我可以在 Process Explorer 中看到 vfp9.exe 拥有一个在我退出 FoxPro 之前永远不会消失的 APP 文件句柄,无论我尝试什么:

  • 将程序设置为
  • 全部关闭
  • 全部释放
  • 取消
  • 全部清除
  • 令人作呕

【问题讨论】:

  • 我正在使用 VFP 7,您不能发出 build app a from a 命令,因为它会引发 file a.pjx does not exist 错误。你有一个 a.pjx 文件吗?也许 9.0 版本不同?
  • @DaveB,感谢您尝试这个。我忘了提到我创建了一个项目“a.pjx”并添加了a.prg。您必须以交互方式执行此操作(即不能编写脚本)。

标签: foxpro visual-foxpro


【解决方案1】:

试试CANCEL Command

结束当前 Visual FoxPro 程序文件的执行。控制 使用 Visual FoxPro 时返回命令窗口 交互式地。如果一个分布式运行时应用程序正在运行, CANCEL 终止应用程序并将控制权返回给 Windows。如果一个 程序在设计期间在 Visual FoxPro 中执行,取消 终止程序并且控制返回到命令窗口。
执行 CANCEL 会释放所有私有变量。

【讨论】:

  • 感谢您的回复。我应该在我尝试过的事情中列出 CANCEL。但是这种情况在程序执行完成后仍然存在,所以无论如何此时都没有什么可以取消的。
【解决方案2】:

在您尝试的所有操作中,我没有看到 CLEAR ALL。我的标准清理是:

CLOSE ALL
CLEAR ALL

添马舰

【讨论】:

    【解决方案3】:

    解决办法是

    CLEAR CLASS TestClass
    

    (顺便说一下,帮助文件中没有索引)。

    在真正的应用程序中,我必须仔细编写发布过程的脚本,以便在发生错误时从这种状态中恢复。但是CLEAR CLASS 是缺失的链接。

    【讨论】:

    • 这对我有用,尽管Pavel Celba reported on MSDN 与此处的@DRapp 相同,但SET PROCEDURE TO 就足够了。我不知道如何解释不同的体验,但我希望这个问题足够清楚,可以以某种方式帮助其他人。
    【解决方案4】:

    我几乎一字不差地做了你所做的……唯一的变化是在 a.prg 中

    SET PROCEDURE TO b
    m.test1 = CREATEOBJECT('TestClass')
    RELEASE m.test1
    SET PROCEDURE TO   <-- I Added this line
    

    此外,您尝试 DELETE A.App WOULD 会失败...除非它是一个糟糕的结果。

    DELETE 是从表中删除记录的命令。我想你的意思是 ERASE a.App 因为没有可用的表,所以它无法对 DELETE 命令执行操作,并且可能给您一个误导的消息。但是通过将关闭的“SET PROCEDURE TO”放在“a.prg”的末尾,可以在完成后正确关闭并擦除 a.app 文件。

    【讨论】:

    • 非常感谢您的尝试。你说得对,我的意思是DELETE FILE,尽管BUILD APP 产生了同样的信息。请参阅我的回答以了解其他发现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    • 2017-08-22
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多