Delphi XE8和致命错误F2039

5

使用XE8更新1、Win 7 64位和一个单独的组件添加到一个否则为空的文件夹中,我会得到以下错误:

错误:[dcc32致命错误] F2039无法创建输出文件.\Win32\Debug\MountTest。

第一次编译和运行测试时都没有问题,但必须关闭并重新启动XE8才能再次编译。该组件是来自Mitov Software的仪表。

组件供应商表示这是一个已知的错误,目前没有修复方法。如果是这样,那么对我来说这是个大问题,可能导致项目失败。Delphi真的走到了尽头吗?

希望有人能从某种程度上解决这个问题。

以下是我为了隔离问题所做的内容:

  1. 从一个无法编译第二次的应用程序开始
  2. 删除所有外部使用的单元
  3. 删除所有与这些单元相关的引用
  4. 删除“Uses”子句中的所有引用
  5. 注释代码直到它可以编译

每次点击运行时它都应该可以编译(没有问题)。现在向项目中添加一个空白窗体,不要对窗体进行任何操作,只需添加它,并将其添加到您的“Uses”子句中。

每次点击运行时它都应该可以编译。现在打开空白窗体并简单地触摸它,以便需要重新编译。

当您运行应用程序时,第二次运行时会再次失败。

请注意,当您仅添加一个窗体并“触摸”它时,就会发生这种情况。不需要代码。

这个问题不是我的代码有问题 - 不可能是。这是UI中的一个错误 - 必须是。


这可能是与这个神秘组件有关的问题。这里没有真正的细节,所以很难看出这里的任何人如何提供帮助。 - David Heffernan
或者这可能是您系统的问题。它可能是任何东西。除非您能提供更多详细信息,否则没有人可以帮助您。 - David Heffernan
好的,如果你没有更多的信息可以提供,那就这样吧。 - David Heffernan
2
一个明显的可能性是应用程序实际上并没有完全终止。如果之前的可执行文件无法被删除并替换为新的可执行文件,则尝试重建可能会失败——如果相关的可执行文件仍在运行,这种情况可能发生。您检查了任务管理器中进程是否完全退出了吗? - J...
显示剩余16条评论
5个回答

7
巧合的是,昨天我测试一些移植到XE8的组件时,遇到了这个问题。在我的情况下,“输出文件”是项目可执行文件。
花费了几个小时试图弄清楚发生了什么(包括重新配置我的 AV 软件、完全禁用它、将项目移动到不同的位置等),最终通过禁用 Castalia 解决了问题。如果我没有使用 Castalia 运行 IDE,则问题不会发生。如果我再次启用 Castalia,则问题会再次出现。
您可以在如何在XE8中禁用Castalia?中找到禁用/启用 Castalia 的说明。
我正在删除上述内容,因为该问题已经重新出现(即使禁用了 Castalia)。进一步的调查显示了一些事情:
  1. 问题似乎与在调试器中引发任何类型的异常有关(即使代码中已处理)。单击调试器异常对话框中的 BreakContinue 像往常一样起作用。然而,下一次尝试编译或构建应用程序将失败,并出现 F2039 错误。在 Windows Explorer 中删除可执行文件可以允许编译和运行一次,然后错误会再次出现。

  2. 重新启动 IDE 可以解决该问题,直到下一次调试器异常发生。

  3. 无论是预先还是后置构建事件中使用 taskkill 还是带有 del 的批处理文件都不起作用。

  4. 在 Embarcadero 上有一个 开放的 QC 条目,表明它在 XE7、XE7.1 和 XE8 中报告过,并且当前是一个开放的内部工单。我找不到一种方法将上面两点信息添加到新的基于 JIRA 的质量门户中的该开放工单中。也许有人能代表我添加这些信息(或者至少添加此帖子的链接)。

  5. 它不与特定项目相关联。原始答案(如上所述)与从早期版本的 XE8 移植一些组件时的测试应用程序有关。当问题再次出现时,它是在一个全新的、完全不相关的项目中,该项目不使用任何非标准组件。

我之前可以访问EMBT QC,并有几个未解决的工单。这些帐户似乎没有迁移到新的QP,我无法在我的帐户下找到任何工单。


是的 - 这就解决了问题。我可以在没有重构的情况下继续进行,但是如果移除Castalia还会有什么其他影响呢? - Seti Net
肯 - 我想感谢你发布这个修复方案。我差点放弃整个项目和 Delphi。现在我可以继续前进了。 - Seti Net
我曾以为停止Castalia是解决方案,但事实并非如此。 第二天,它又回来了! - Seti Net
我的设备没有出现这个问题,而且我昨天整天都在使用它。 - Ken White
我已经全职回来了。当我以管理员身份运行IDE时,我也认为我已经解决了它。似乎有一段时间可以工作,但后来又出现了问题。 - Seti Net
我找到了一个似乎有帮助的“解决方案”。我注意到我的服务:AppMgmt没有运行,并且设置为手动启动。我将其更改为自动启动,似乎确实有所帮助。仍在进行实验。 - Seti Net

3

找到问题了。

我决定从头开始搭建我的开发系统,并找到了问题所在。

我在全新的硬盘上安装了Windows 10。

安装了XE8 update 1。

安装了MITIOV Instruments for XE 8并测试它们。一切正常。

安装了AsyncPro - 仍然正常工作。

安装了JEDI Jcl - 失败了。

删除JEDI Jcl - 现在可以正常工作。

完全摆脱JEDI - 一切正常。

JEDI Jcl版本3.48中的某些东西导致了问题。我可以绕过我使用的JEDI组件而不太费力地编写代码,但这很遗憾。


我曾经认为XE8包管理器提供的JCL和JVCL可以解决这个问题,但是我错了。JCL在XE8中仍然无法使用。 - Seti Net

1
如何在构建之前自动关闭“挂起”应用程序?

enter image description here


好主意但仍然失败了。我输入: del $(OUTPUTFILENAME) 但该命令返回: 拒绝访问。 - Seti Net
不起作用。IDE无法删除它。我尝试过使用预先和后构建事件。我尝试过使用批处理文件终止任务或删除.exe文件。但都没有成功。请查看我的重现步骤。 - Ken White

0

我在Win 7 Pro 64位系统上使用XE8时也遇到了这个问题。

移除JCL解决了这个问题。如果我是一个赌徒,我会更仔细地查看JCL Debug IDE扩展。


-1

各位..

没有升级到Delphi 10.1的理由,因为所有之前的版本都配备有旧版Android SDK。

现在,解决这个烦人的问题的方法如下:

只需找到安装了Android SDK的路径。 请参见:工具/选项/Delphi选项/SDK管理器/Android位置

现在以管理员身份运行..\sdk\tools\android.bat 这将显示Andoid SDK管理器。

接下来是更新最新版的Android SDK和SDK工具。

如果全部完成,你就不必升级到Delphi 10.1或任何其他“建议”的版本。

重新启动Delphi,问题解决!

顺便说一句: 要弄清楚这里发生了什么,需要花费一些力气,因为Eclipse编译器和Delphi一样遇到了同样的问题。最后发现,所有问题都与早期版本的Android SDK中的错误相关,导致adb.exe继续保留文件句柄。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接