antでinnoセットアップパッケージの作成を自動化することは可能ですか?
-
05-07-2019 - |
質問
Eclipse RCPアプリケーションを作成しています。
次の記事「デイリービルドはあなたの友達です」のジョエルのアドバイスに従っています:
http://www.joelonsoftware.com/articles/fog0000000023.html
だから、Eclipse RCP製品を作成し、コードで単体テストを実行する素晴らしいビルドスクリプトを書きました。その後、すべての結果が開発者のリストに配布されます(不平を言った後)。次のステップでは、通常innoセットアップコンパイラを使用して手動で作成するセットアップパッケージを作成します。
質問は、このパッケージを自動的に作成するにはどうすればいいですか? antからinnoセットアップファイルを自動的に生成し、コマンドラインからコンパイラを起動できると思いますが、これが可能かどうかはわかりません。
このタスクのヒントはありますか?おそらく、antから使用できる他のセットアップアプリケーションはありますか?
解決
簡単であることを確認してください。Innoプロジェクトはプレーンテキストファイルなので、antでsetupperスクリプトを簡単に編集することもできますが、スクリプトで小さなインクルードファイルを作成することをお勧めします。そこに「変数」を保存できます。セットアップの開始時に表示されるバージョン+ビルド番号など。
この行をセットアップ担当者に入力してください:
#include "settings.txt"
そしてsettings.txtにこのようなものを持たせます
#define myver=xxx.xxx
#define tags
ビルドスクリプトから実際のセットアップコードを変更する必要はありません。
belowは、セットアップスクリプトをコンパイルするためのビルドスクリプトのスニペットです。 次のように、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
他のヒント
インストーラのビルドを自動化するときのもう1つの便利な方法は、 GetFileVersion
プリプロセッサ(ISPP)マクロを使用することです。そうすれば、(バイナリの)ファイルのバージョン番号をハードコードされた形式で複製する必要がなくなります(Tomの 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 ...
その後、これらを ifdef
sで使用して、さまざまなタイプのインストーラーを作成します(愚かな例が続きます):
[Registry]
#ifdef SpecialEdition
Root: HKLM; Subkey: Software\MyCompany\MyApp; ValueName: SpecialEdition; ValueType: dword; ValueData: 1 ...
#endif