【问题标题】:Is it possible to automate the creation of a inno setup package with ant?是否可以使用 ant 自动创建 inno 安装包?
【发布时间】:2010-09-15 17:03:44
【问题描述】:

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

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

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

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

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

对于这个任务有什么建议吗?也许任何其他可以从 ant 使用的设置应用程序?

【问题讨论】:

    标签: java eclipse inno-setup rcp


    【解决方案1】:

    自动化安装程序构建时的另一个好技巧是使用 GetFileVersion 预处理器 (ISPP) 宏。这样你就不必以硬编码的形式复制你的(二进制)文件的版本号(就像汤姆的settings.txt)——安装程序编译器会简单地从文件的版本资源中读取它。例如:

    #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 ...
    

    然后在ifdefs 中使用这些来创建不同类型的安装程序(以下是愚蠢的示例):

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

    【讨论】:

    • ISPP.exe 从哪里获得?我的文件夹中没有预处理器工具,并且在编译时出现错误。
    • 获取它的最简单方法是从 InnoSetup 主页下载快速启动包。这包括编译器、预处理器和其他一些增强功能。
    【解决方案2】:

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

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

    #include "settings.txt"
    

    并使 settings.txt 有这样的东西

    #define myver=xxx.xxx
    #define tags
    

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

    下面是我的构建脚本中用于编译安装程序的 sn-p。 您需要像这样从 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
    

    【讨论】:

    • 谢谢!反响很大。我确实谷歌了它,但我发现没有简单的方法可以立即做到这一点。我对如何进行有一个想法,但我不是 100% 确定。包含文件的建议非常简洁,因为我可以从其他构建选项中生成它。
    • 很高兴听到,如果您需要其他 INNO 提示,请告诉我
    猜你喜欢
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    相关资源
    最近更新 更多