0

如果我从命令行/批处理文件运行 Inno Setup 编译器,它会创建一个 exe,文件名中包含版本信息。

但是,当我从 hudson(相同的命令行)运行时,我没有得到版本信息。

也许我错过了一些东西。

这是一个已知的问题?

这是我在 iss 脚本文件中这样做的方式。

#define FileVerStr GetFileVersion(SrcApp)

编辑:

环境变量都是为所有用户设置的——不仅仅是我的登录名——所以服务可以访问命令行构建所做的一切。

编辑:请参阅我的答案以解决此问题。

4

3 回答 3

3

就像“蒂姆”所说的那样,相对路径不能像定义的那样工作。

#define MyAppVer GetFileVersion(SourcePath + "\..\Build\Release\MyExeName.exe")
#if MyAppVer == ""
    #error MyAppVer - Version information not found!
#endif

通过使用SourcePath作为前缀,则相对路径将从 InnoSetup 脚本所在的路径开始。

于 2010-02-15T17:30:02.713 回答
1

鉴于提到的技术,您很可能在 Windows 上运行 Hudson。

当命令行上发生的事情与 Hudson 所做的事情之间存在差异时,通常是因为 Hudson 在 Windows 上作为服务运行。这意味着它作为服务用户运行,这与您的登录帐户不同。

我会查找您在用户配置文件中定义的可能启用此行为的环境变量,该变量不是为服务用户设置的。

于 2009-12-05T17:23:49.283 回答
0

我不确定如何描述我是如何“修复”这个/解决它的。

似乎 GetFileVersion() 方法不使用与确定源文件/可安装文件位置的 Inno 功能的其他部分相同的基本路径。

相同的相对路径用于:

// this is for determining what files get put into the install image
[Files]
Source: ..\Build\ForRelease\MyExeName.exe; DestDir: {app}

#define SrcApp "..\Build\ForRelease\MyExename.exe"
#define FileVerStr GetFileVersion(SrcApp)

显然不使用相同的机制来解析文件名/路径。所以我解决这个问题的方法是将包含版本信息的 exe 文件复制到另外两个不同的位置(除了 ..\Build\ForRelease)——一个是 hudson 启动进程的位置,另一个是 inoo 脚本所在的路径是。(我懒得弄清楚哪一个是让这一切正常工作的那个。

同样,这在我的批处理文件中可以正常工作,但在 hudson 中却不行。我猜这本质上是与 Inno 工作方式的奇怪交互。

于 2009-12-06T06:05:53.997 回答