Prebuild事件在Windows 7中有效,在XP中失败
|
我设置了一个预构建事件,以生成要嵌入到我的exe中的版本/内部版本号。该事件包括对执行实际工作的批处理文件的调用(将参数传递给该批处理文件)。批处理文件在我尝试过的所有计算机(包括Windows XP计算机)上都可以正常工作。在运行Windows 7的3台计算机上,它也可以作为预构建事件很好地运行。但是,预构建事件在Windows XP上失败。 Delphi返回了一个错误代码,我似乎找不到对任何地方“ 20018”的引用。
我已经尝试了多种方式来调用批处理文件,但没有任何运气。有人知道发生了什么吗?
构建事件如下:
call \"..\\..\\Build Tools\\PreBuild.bat\" \"$(PROJECTDIR)\"
更新:
我已删除了批处理文件的源代码,因为它与实际问题无关。
没有找到相关结果
已邀请:
2 个回复
蜂佬渺
我不得不以这种方式修复它:
在另一种情况下,我发现必须以这种方式修复它:
您还提到您只是在运行一个神秘的批处理文件,而没有提及它的作用。因此,让我们来看一下,从构建后的步骤运行批处理文件时,我们可以做些什么。...当我运行这样的批处理文件时,有时在XP上会遇到问题,如下所示:
但是当我以不同的方式运行它时,我发现它可以在XP上运行,但是我丢失了命令行输出:
在IDE中运行构建后步骤时,似乎发生了一些奇怪的事情,可以通过尝试以各种形式在IDE外部尝试命令来解决。 您提到的数字(20018)有点愚蠢,它可能是您在批处理文件中运行的任何工具的ERRORLEVEL(向命令外壳返回值)。由于您没有告诉我们您正在运行什么工具,所以我想知道您是否已经完成了查看在XP计算机上IDE之外运行该批处理文件时会发生什么的基本步骤。我的猜测是,如果它不是来自您自己的批处理文件,则它来自MSBUILD本身的内心深处,这是几乎没有任何Delphi人员会知道源代码的东西(即使Delphi团队本身也是使用Microsoft提供的二进制文件提供MSBUild功能)。我注意到,MSBUILD的用于执行构建后和构建前步骤的内置任务是IDE的一个需要改进的领域,尤其是在调试此类问题时。但是,您可以简单地在IDE外部运行它们,看看它们是否能以这种方式工作,并且您可以尝试一些东西,如我上面所建议的。 如果这是您的批处理文件...我建议由于依赖性问题,您可能不想使用这种批处理文件技术来修改RC文件,因为它可能会在RAD / Delphi构建任务的MSBUILD中暴露出一些奇怪的依赖性问题。 。在XP上,我也曾见过一些怪异的BRCC32故障,但我无法重现。
搁手
这是链接中的重要内容: 命令行:这是所有操作中最棘手的,但是当您开始工作后,它们都很容易。这里的技巧不是在程序名称上使用引号,而是在Windows SFN(短文件名)中使用。原因是,如果需要使用引号将文件的路径括起来,则IDE会与过多的引号混淆。因此,这些是在上面添加该命令行的错误方法: C:\\ Program Files \\ SoftwarePassport \\ Armadillo.exe D:\\ Dev \\ My Prog \\ Prot.arm / P \“ C:\\ Program Files \\ SoftwarePassport \\ Armadillo.exe \” D:\\ Dev \\ My Prog \\ Prot.arm / P C:\\ Program Files \\ SoftwarePassport \\ Armadillo.exe \“ D:\\ Dev \\ My Prog \\ Prot.arm \” / P \“ C:\\ Program Files \\ SoftwarePassport \\ Armadillo.exe \” \“ D:\\ Dev \\ My Prog \\ Prot.arm \” / P 如果没有让IDE与它混淆,那么最后一个应该可以工作。因此,有效的方法之一是: C:\\ Progra〜1 \\ Softwa〜1 \\ Armadillo.exe \“ D:\\ Dev \\ My Prog \\ Prot.arm \” / P C:\\ Progra〜1 \\ SoftwarePassport \\ Armadillo.exe \“ D:\\ Dev \\ My Prog \\ Prot.arm \” / P