是否可以使用ant自动创建一个inno安装包?

时间:2008-10-07 08:30:48

标签: java eclipse inno-setup rcp

我正在创建一个Eclipse RCP应用程序。

我在以下文章“每日构建是你的朋友”中遵循Joel的建议:

http://www.joelonsoftware.com/articles/fog0000000023.html

所以,我写了一个很好的构建脚本,它创建了一个Eclipse RCP产品,并对代码运行单元测试。然后将所有结果分发到开发人员列表中(在一些抱怨之后)。现在我的下一步,我希望它创建我通常使用inno setup编译器手动创建的安装包。

问题是,如何自动创建此包?我想我可以从ant自动生成inno安装文件,然后从命令行调用编译器,但我不知道这是否可行。

此任务的任何提示?也许可以从ant使用的任何其他设置应用程序?

2 个答案:

答案 0 :(得分:10)

自动化安装程序构建时的另一个好方法是使用GetFileVersion预处理器(ISPP)宏。这样你就不必以硬编码的形式复制你的(二进制)文件的版本号(比如Tom的settings.txt) - 安装程序编译器只会从文件的版本资源中读取它。 E.g:

#define AppName "My App"
#define SrcApp "MyApp.exe"
#define FileVerStr GetFileVersion(SrcApp)
#define StripBuild(str VerStr) Copy(VerStr, 1, RPos(".", VerStr)-1)
#define AppVerStr StripBuild(FileVerStr)

[Setup]
AppName={#AppName}
AppVersion={#AppVerStr}
AppVerName={#AppName} {#AppVerStr}
UninstallDisplayName={#AppName} {#AppVerStr}
VersionInfoVersion={#FileVerStr}
VersionInfoTextVersion={#AppVerStr}
OutputBaseFilename=MyApp-{#FileVerStr}-setup

此外,您可以通过/d命令行开关将符号转发给编译器,例如:

iscc.exe /dSpecialEdition ...

然后在ifdef中使用这些来创建不同类型的安装程序(后面是愚蠢的例子):

[Registry]
#ifdef SpecialEdition
Root: HKLM; Subkey: Software\MyCompany\MyApp; ValueName: SpecialEdition; ValueType: dword; ValueData: 1 ...
#endif

答案 1 :(得分:7)

确保它很简单,Inno项目是一个纯文本文件,因此您甚至可以通过ant轻松编辑安装程序脚本,但我建议您通过脚本创建一个单独的小包含文件。您可以存储“变量”,例如您在设置开始时显示的版本+内部版本号。

将此行放入您的安装程序:

#include "settings.txt"

并使settings.txt具有类似的内容

#define myver=xxx.xxx
#define tags

现在您无需从构建脚本中触摸实际的安装程序代码。

下面的

是我的构建脚本中用于编译安装程序的片段。 你需要像这样从ant执行批处理文件:

<exec dir="." executable="cmd" os="Windows NT">
  <arg line="/c build.bat"/>
</exec>

示例批量build.bat:

set isxpath="c:\program files\inno setup 5"
set isx=%isxpath%\iscc.exe
set iwz=myproj.iss
if not exist %isx% set errormsg=%isx% not found && goto errorhandler
%isx% "%iwz%" /O"%buildpath%" /F"MySetupper.exe" >>%logfile%
goto :eof