試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

InstallShieldインストーラのインストール作業を自動化する

Wine環境にWindowsアプリケーションをインストールする際には、ウィザードと呼ばれる対話形式のインストーラの中で「次へ」のクリックやインストールされる機能のカスタマイズといった、幾つかの指示を行う場合が多い。*1
インストーラには幾つかの種類があるのだが、広く使用されている「InstallShield」という製品のインストーラでは、インストール作業の内容を一度記録し、そのファイルを使用することで、インストール作業を非対話的にする(自動化する)ことができる。
今回は、作業内容の単純な例として、RPGツクール2000 RTPを使用する。
関連記事:

記録

InstallShieldのSetup.exeに対してオプション指定を行う

インストール作業の内容を記録するには、インストーラであるSetup.exeに対して

の2つのオプション(スイッチ)を付ける。/f1を付けない場合、${WINEPREFIX}/dosdevices/c:/windows/setup.issという場所のファイルに保存される。
注意しなくてはならないのは、InstallShieldのインストーラのexeファイルに対してオプションを付けるということで、今回使用するインストーラのexeファイル(後述)は一時ディレクトリにInstallShieldのファイル群を展開する自己展開書庫(Cabinet形式)なので、Cabinetファイルを扱える圧縮/展開ツールを使用して、一度中身を手動で展開しておく必要がある。

作業の実際

あらかじめ、ランタイムパッケージのインストーラをダウンロード(google:2000 RTP)し、LHA形式の自己展開書庫からRPG2000RTP.exeを得る。*2

ファイル情報: RPG2000RTP.exe
項目
ファイルサイズ12,325,462バイト
MD5f745653bbee5ba9a6725a874a43386d5
SHA-1f5ddcf5285ee5e4d663dceb059059dd2931cf9e3
次に、Cabinet形式を扱えるツールでこのファイルを展開する。今回はCabinet形式だったが、他のパッケージではCabinet以外が使用されていることもあるので注意。
ここではcabextractコマンドでこの自己展開書庫を展開しているが、WineWindowsアプリケーションを使用して展開してもよい。

$ mkdir work; cd work/
$ cabextract [RPG2000RTP.exeの場所]
[RPG2000RTP.exeの場所]: library not compiled to support large files.
Extracting cabinet: [RPG2000RTP.exeの場所]
  extracting data1.cab
  extracting data1.hdr
  extracting data2.cab
  extracting ikernel.ex_
  extracting layout.bin
  extracting Setup.exe
  extracting Setup.ini
  extracting setup.inx

All done, no errors.

ここから記録作業に入る。すでにこのパッケージがインストールされている場合はインストーラを実行するかuninstallerコマンドから削除(アンインストール)しておく。

$ wine Setup /r /f1"C:\WINDOWS\TEMP\rpg2000rtp.iss"

これを実行すると、インストーラ上の操作がWine環境内のC:\WINDOWS\TEMP\rpg2000rtp.iss*3に記録される。
今回は、ユーザが変更できるのはインストール先指定のみなので、それを変更しなければ、下のようなファイルができる。

[InstallShield Silent]
Version=v6.00.000
File=Response File

[File Transfer]
OverwrittenReadOnly=NoToAll

[{33F7A957-A66D-45A1-BADF-6576083B14E2}-DlgOrder]
Dlg0={33F7A957-A66D-45A1-BADF-6576083B14E2}-SdWelcome-0
Count=3
Dlg1={33F7A957-A66D-45A1-BADF-6576083B14E2}-SdAskDestPath-0
Dlg2={33F7A957-A66D-45A1-BADF-6576083B14E2}-SdFinish-0

[{33F7A957-A66D-45A1-BADF-6576083B14E2}-SdWelcome-0]
Result=1

[{33F7A957-A66D-45A1-BADF-6576083B14E2}-SdAskDestPath-0]
szDir=C:\Program Files\ASCII\RPG2000
Result=1

[Application]
Name=RPGツクール2000 ランタイムパッケージ
Version=1.00.000
Company=ASCII
Lang=0011

[{33F7A957-A66D-45A1-BADF-6576083B14E2}-SdFinish-0]
Result=1
bOpt1=0
bOpt2=0

日本語部分のエンコーディングShift_JISになっている。

再生のテスト

一度アンインストールした後で、InstallShieldのSetup.exeに対して操作を行う。issファイルの場所を${WINEPREFIX}/dosdevices/c:/windows/setup.issから変更する場合に/f1"[Windows形式の絶対パス]"オプションで指定するのは、記録時と同様。

$ wine Setup /s /f1"C:\WINDOWS\TEMP\rpg2000rtp.iss"

これでインストールは非対話的に行われ、少しした後で終了する。
インストール後、issファイルのあるディレクトリにsetup.logが生成される。この場所は/f2"[Windows形式の絶対パス]"オプションで指定することもできる。
内容は下のようになり

[InstallShield Silent]
Version=v6.00.000
File=Log File

[ResponseResult]
ResultCode=0

[Application]
Name=RPGツクール2000 ランタイムパッケージ
Version=1.00.000
Company=ASCII
Lang=0011

正常終了したことが分かる。

参考URL:

*1:アプリケーションによっては、インストーラを使用せず、書庫を単純に展開する形でインストールするものもある

*2:直接実行もしくはlhaコマンドにより展開

*3:既定では${HOME}/.wine/drive_c/windows/temp/rpg2000rtp.iss