如果我从命令行/批处理文件运行Inno Setup编译器,它会在文件名中创建一个带有版本信息的exe文件。
但是,当我从hudson(同一命令行)运行时,我没有得到版本信息。
也许我错过了什么。
这是一个已知问题吗?
在iss脚本文件中This is the way I am doing it。
#define FileVerStr GetFileVersion(SrcApp)
编辑:
env vars全部为所有用户设置 - 不仅仅是我的登录 - 因此服务可以访问命令行构建的所有内容。
编辑:请参阅我的回答以解决此问题。
答案 0 :(得分:3)
就像“蒂姆”所说的那样,相对路径不能像定义那样工作。
#define MyAppVer GetFileVersion(SourcePath + "\..\Build\Release\MyExeName.exe")
#if MyAppVer == ""
#error MyAppVer - Version information not found!
#endif
通过前缀 SourcePath ,相对路径将从InnoSetup脚本所在的路径开始。
答案 1 :(得分:1)
鉴于所提到的技术,你很可能在Windows上运行Hudson。
当命令行上发生的事情与Hudson所做的事情之间存在差异时,通常是因为Hudson在Windows上作为服务运行。这意味着它作为服务用户运行,这与您的登录帐户不同。
我会查找您在用户配置文件中定义的环境变量,该变量可能会启用此行为,而不是为服务用户设置的行为。
答案 2 :(得分: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的工作方式基本上是一种奇怪的互动。