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
項目 | 値 |
---|---|
ファイルサイズ | 12,325,462バイト |
MD5 | f745653bbee5ba9a6725a874a43386d5 |
SHA-1 | f5ddcf5285ee5e4d663dceb059059dd2931cf9e3 |
ここではcabextractコマンドでこの自己展開書庫を展開しているが、WineでWindowsアプリケーションを使用して展開してもよい。
$ 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
再生のテスト
一度アンインストールした後で、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: