既に過去の仕様となっているAdobe AIRですが、AIRアプリを内製している企業にとってはまだ必要な存在。
そんなAIRの内製アプリをバージョンアップする時に上手くいかなかったことがあるので自分用の備忘録を兼ねたご報告です。
依頼:AIRアプリをバージョンアップ
AdobeAIRベースで動作している内製ソフトウェアの新バージョンをリリースしたので、.airファイルを展開させたいということで、展開を実施することになりました。
前回arh.exeを使用して、上手くインストールの実行ができたので、今回も前回を踏まえて実施してみることにしました。
■前回
AIRアプリ(.airファイル)をサイレントインストールしたい - treedown’s Report
前回は縮小専用AIR(shukusnA.air)を例に実施していました。
インストール対象となる環境はWindows10で全て64ビットOSという前提、権限代行などはPalletControlといった別のソリューションで行い、純粋にインストールコマンドを一行実行するという方向で考えていきます。
実行してみると、エラー
さっそくバッチファイル&スクリプトを組み合わせて、
"%実行パス%\arh.exe" -installAppSilent -desktopShortcut -programMenu "%インストーラ保存パス%\%AIRファイル名%.air"
を実行することにしました。これ自体は前回と同じ。実行権限も権限代行で問題ないようにしたし、さあ実行、と思ったら、全然動作しないという状況に。
サイレントインストールだけに、どこでインストールに問題が起きたかを探すのも一苦労です。コマンドラインでテスト環境にインストールソースをコピーしてきて、実行してみることにしました。
インストールを実行する.airファイル単体での動作に問題はなし。
インストールにつかうarh.exeファイルも単体での動作に問題ないということで、ファイル自体の動作には問題ないという結論に至りました。
それではと、バッチファイルに記載したコマンドラインを実際にコマンドプロンプトで実行してみると、
エラーらしきものが表示されてインストール処理が開始していないことが判明。
「failed due to invalid certificate(証明書が無効なため失敗しました)」と記載されています。※別のPCでは「failed due to bad configuration(構成が無効なため失敗)」とエラーになるPCもありました。
アプリケーション証明書に問題がある?
いや、でも、ダブルクリックで手動実行している限りではこのような問題は起きていないので、arh経由にした時だけの問題なのかなぁと。
ログも調べてみる
AIRのインストールログは、<%USERPROFILE%\AppData\Local\Adobe\AIR\logs>に「Install.log」というファイル名で格納されています。
失敗した(エラーの)記録も詳細に残されているはずです。さっそく確認してみます。
----------------------------------------------------------------------------------------------------------------------------
[2023-04-26:16:56:39] Commandline is: -silent -desktopShortcut -programMenu C:\temp\Test-App\Tst-App.air
[2023-04-26:16:56:39] Installed runtime (32.0.0.125) located at c:\Program Files (x86)\Common Files\Adobe AIR
[2023-04-26:16:56:41] Application signature verified
[2023-04-26:16:56:41] Unpackaging/validation complete
[2023-04-26:16:56:41] Installed app (Test-App2) located at C:\Program Files (x86)\Test-App\Test-app.exe
[2023-04-26:16:56:41] Bad configuration: mode is silent install, but the app is installed
[2023-04-26:16:56:41] Application Installer end with exit code 9
----------------------------------------------------------------------------------------------------------------------------
こういう感じのログが残っていました。※一部抜粋/一部改編
「Unpackaging/validation complete」までは順調にアプリケーションのインストールが進んでいる様子が確認できますが、この次の行
「Installed app (Test-App2) located at C:\Program Files (x86)\Test-App\Test-app.exe」
からやや雲行きが怪しくなってきています。既にアプリが存在していますよ、という表記と共に、次の行で
「Bad configuration: mode is silent install, but the app is installed」
(構成が正しくありません: モードはサイレント インストールですが、アプリはインストールされています)
と記録された後で、「Application Installer end with exit code 9」(アプリケーション インストーラーが終了コード 9 で終了します)で、インストール処理が終了しています。
サイレントインストールに限っては、既存のアプリケーションを上書きインストールすることができない?
あるいは、上書きオプションは別途あるけど、そのオプションを知らないだけ?
今回の対処⇒アンインストール処理を先に入れる
今回は、単純に「旧バージョンのアンインストールを実行してから新バージョンのインストール処理を開始する」という方法で処理をすることにしました。
UnInstallStringを探すと、「MsiExec.exe /I{%アプリのGUID%}」を発見したので、サイレントでアンインストールとなるように、
「MsiExec.exe /uninstall {%アプリのGUID%} /quiet」
と書き換えて、新バージョンのインストール前に処理として加えるようにします。
最終的に
バッチファイルは
--------------------------------------------------------------
@echo off
MsiExec.exe /uninstall {%アプリのGUID%} /quiet
"%実行パス%\arh.exe" -installAppSilent -desktopShortcut -programMenu "%インストーラ保存パス%\%AIRファイル名%.air"
--------------------------------------------------------------
という感じでいったん完了。
うーん、ただ、バージョン確認でアンインストールを実行するとか、インストールバージョンの判定をするとか、もうちょっと判定処理を入れたくなってきたような気もします。もうちょっと改善の余地あり。