2011-06-21 54 views
3

我有一个预生成事件设置为生成版本/内部版本号以嵌入到我的exe文件中。该事件由调用实际工作的批处理文件(参数传递给批处理文件)组成。批处理文件在我尝试过的所有计算机上都能正常工作,包括Windows XP计算机。在运行Windows 7的3台计算机上,它也可以很好地作为预生成事件运行。但是,预生成事件在Windows XP上失败。德尔福返回一个错误代码,我似乎无法找到任何地方的参考,“20018”。Prebuild事件在Windows 7中工作,在XP中失败

我已经尝试了一些数字变化来调用批处理文件,但没有任何运气。有没有人有一个想法发生了什么?

构建事件如下:

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

更新: 我已经删除了批处理文件的来源,因为它没有对实际问题的相关性。

+5

Jason,怎么可能有人告诉你什么可能是错误的,没有更多的信息比你提供的?我们不知道该批处理文件包含的内容,文件夹位置,XP下的权限(管理员,超级用户,受限用户)或其他任何可能有帮助的内容。任何回答的尝试都只是猜测,并没有用。如果您需要帮助解决此问题,则需要提供更多信息 - 请记住,我们无法从此处看到您的屏幕,并且只能获得您在问题中提供的信息。 –

+4

回答你的问题肯 - 在预生成事件的上下文中识别错误代码20018的人可能会有一些洞察力。这就是人们如何可能告诉OP什么可能是错的。对于没有认识到特定错误代码的人来说,是的,一些更多的信息会有所帮助,但我不太确定一个高压的和居高临下的评论在引发这些信息方面比在最初的问题引发一个有用的信息方面更有效没有这些信息的答案。我们应该试着记住我们的exp。 (在Delphi或SO中)不是通用的。 – Deltics

+1

@Jason - 正如Ken以稍微不同的方式说的那样:),缺少对该错误代码的谷歌搜索暗示该问题与批处理文件或其运行环境中的某些内容相关。您是否曾尝试在XP机器上隔离运行批处理文件? (你的问题并不是100%清楚)。如果是这样(或者事实上,如果不是这样做),那么会得到什么结果?你能提供一些有关批处理文件包含的更多细节吗?您可以分享的附加信息越多,可能有人可能会提供帮助。 – Deltics

回答

2

好吧,我终于找到了答案在这里: http://delphi.about.com/od/devutilities/a/pre_post_build.htm

的问题是在路径批处理文件空间被调用。显然,这是不是在Windows 7

删除在构建工具目录的空间,并改变预生成事件下面的解决了这一问题一个问题:

call ..\..\BuildTools\PreBuild.bat "$(PROJECTDIR)" 

下面是来自链接的重要位:

命令行:这是他们所有人中最棘手的问题,但是在你工作之后,他们都很容易。这里的诀窍不是在程序名称上使用引号,而是使用窗口SFN(短文件名)。原因是,如果您需要使用引号来封装文件的路径,则IDE会被太多引号混淆。所以,这些都是加入该命令行以上的错误的方法:

C:\ Program Files文件\ SoftwarePassport \ Armadillo.exe d:\开发\我的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:\开发\我的PROG \ Prot.arm”/ P

这最后一个守ld的工作,如果它不是让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

2

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

如果您不知道哪条线路发生故障,请单独尝试第一条线路,然后删除其余线路,并查看是否通过。

例如,在构建后步骤中使用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)有点愚蠢,可能是你在批处理文件中运行的任何工具的ERRORLEVEL(返回值到命令shell)。既然你什么都没有告诉我们你正在运行什么工具,我想知道你是否已经完成了基本的一步,看看在XP机器上的IDE外部运行该批处理文件时会发生什么。我的猜测是,如果它不是来自你自己的批处理文件,它来自MSBUILD本身的内心深处,这是很少有德尔菲人会知道源代码的东西(甚至德尔菲团队本身正在使用来自Microsoft的二进制文件提供MSBUild功能)。我注意到MSBUILD内置的后期构建和预构建步骤是IDE需要改进的一个方面,特别是在调试这样的问题时。然而,你可以在IDE之外运行它们,看看它们是否以这种方式工作,并且可以尝试一些东西,正如我上面提到的那样。

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

相关问题