为什么FoxPro不发布我的APP文件?

时间:2012-03-14 03:13:05

标签: foxpro visual-foxpro

我正在将一个旧的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在APP文件上有句柄,在我退出FoxPro之前永远不会消失,无论我尝试什么:

  • SET程序
  • 关闭所有
  • 释放所有
  • CANCEL
  • 全部清除
  • ad nauseum

4 个答案:

答案 0 :(得分:1)

尝试CANCEL Command

  

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

答案 1 :(得分:0)

在你尝试过的事情中,我没有看到CLEAR ALL。我的标准清理是:

CLOSE ALL
CLEAR ALL

答案 2 :(得分:0)

解决方案是

CLEAR CLASS TestClass

(顺便提一下,它没有在帮助文件中编入索引)。

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

答案 3 :(得分:0)

我做了你几乎逐字逐句的事情...只有改变是在a.prg

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

另外,你的尝试 删除A.App将失败...除非是哎呀。

DELETE是一个从表中删除记录的命令。我想你的意思 删除a.App 由于没有可用的表,因此它无法对DELETE命令执行操作,并且可能一直在向您发送错误的消息。但是通过将结束&#34; SET PROCEDURE TO&#34;在&#34; a.prg&#34;的最后完成后允许它正确关闭并删除a.app文件。