delphi - 预构建事件在 Windows 7 中有效,在 XP 中失败

标签 delphi windows-xp delphi-2009

我设置了一个预构建事件来生成要嵌入到我的 exe 中的版本/内部版本号。该事件包含对执行实际工作的批处理文件的调用(将参数传递给批处理文件)。该批处理文件在我尝试过的所有计算机上都可以正常工作,包括 Windows XP 计算机。它在此处运行 Windows 7 的 3 台计算机上作为预构建事件也运行良好。但是,预构建事件在 Windows XP 上失败。 Delphi 返回一个错误代码,我似乎找不到对任何地方的引用,“20018”。

我尝试了多种调用批处理文件的方式,但没有成功。有人知道发生了什么事吗?

构建事件如下:

call "..\..\Build Tools\PreBuild.bat" "$(PROJECTDIR)"

更新: 我已经删除了批处理文件的源代码,因为它与实际问题无关。

最佳答案

您提供的信息太少,我很想投票结束。相反,我会大胆猜测。您应该在构建后步骤中发布命令。

如果您不知道哪一行出现故障,请单独尝试第一行,然后删除其余行,看看是否通过。

例如,我经常在构建后步骤中使用 XCOPY 命令在 XP 计算机上遇到问题,并且这些命令通常会导致非常奇怪的错误代码,我无法诊断或确定其含义。因此,如果您有 XCOPY 命令,您应该在构建环境内部和外部尝试 XCOPY,看看它是否适用于 Windows XP 机器。

您可以从 Rad Studio IDE 中的“输出”选项卡中以宏扩展形式复制运行时的命令,将它们粘贴到记事本中,将它们作为批处理文件运行,然后尝试找出答案为什么它们不能在 Windows XP 上运行。

下面是使用 XCOPY 的解决方法示例。如果这在 XP 上失败,我会调整它直到它起作用:

 XCOPY  SourceDir DestDir

我必须这样修复它:

 XCOPY.exe  SourceDir DestDir

在另一种情况下,我发现我必须这样修复它:

 call XCOPY SourceDir DestDir

您还提到您只是运行一个神秘的批处理文件,但没有提及它的作用。那么让我们看看,我们可以采取什么不同的方式来从构建后步骤运行批处理文件......当我运行这样的批处理文件时,我有时会在 XP 上遇到问题,如下所示:

batchfilename.cmd

但是当我以不同的方式运行它时,我发现它可以在 XP 上运行,但我丢失了命令行输出:

call batchfilename.cmd

在 IDE 中运行构建后步骤时,似乎发生了一些奇怪的情况,这可以通过尝试 IDE 外部的各种形式的命令来解决。

您提到的数字(20018)在谷歌上搜索有点愚蠢,它可能是您在批处理文件中运行的任何工具的错误级别(命令外壳的返回值)。由于您没有告诉我们您正在运行什么工具,我想知道您是否已经完成了查看当您在 XP 计算机上的 IDE 之外运行该批处理文件时会发生什么的基本步骤。我的猜测是,如果它不是来自您自己的批处理文件,那么它来自 MSBUILD 本身的内部深处,这是很少有 Delphi 人知道源代码的东西(甚至 Delphi 团队本身正在使用来自 Microsoft 的二进制文件,用于提供 MSBUild 功能)。我注意到 MSBUILD 用于执行构建后和构建前步骤的内置任务是 IDE 中需要改进的一个领域,尤其是在调试此类问题时。不过,您可以简单地在 IDE 之外运行它们,看看它们是否能以这种方式工作,然后您就可以尝试一些东西,正如我上面所建议的那样。

如果this是你的批处理文件...我建议,由于依赖性问题,你可能不想使用这样的批处理文件技术来修改 RC 文件,因为它可能会在 MSBUILD 中与 RAD/Delphi 构建任务暴露一些奇怪的依赖性问题。我还看到一些奇怪的 BRCC32 故障,在 XP 上我无法重现。

关于delphi - 预构建事件在 Windows 7 中有效,在 XP 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6431796/

相关文章:

delphi - 如何在 TMenuOption 中显示希腊符号

python - 使用 WSGI 在 Windows XAMPP 中设置 Python 路径

delphi - 自定义组件创建 - 如何在工具面板中添加表示组件的小图标?

delphi - Delphi 2009 中的 dfm 中添加的 DoubleBuffered 属性在 Delphi 2007 中不存在

delphi - 为什么 CharInSet 比 Case 语句更快?

mysql - 将 MySQL 应用程序从 Delphi 2006 升级到 2010 时出现问题

mysql - 如何在 Delphi 7 中连接 FastReport 和 MySQL 5.5?

delphi - 如何为动态创建的面板着色?

Android:无法更新到 Android SDK 工具,修订版 7

ssl - XP POSReady 和 TLS 1.2