treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

Paint.netの無人インストールを試してみる

前回<Paint.netの無人インストールを調べてみる>からの続き。
実際に試してみたことをご報告です。

前回の<Paint.netの無人インストールを調べてみる - treedown’s Report>は、今回の記事の前提知識となるので、本記事前に一読をお勧めします。

新規インストールで自動更新無効の無人インストール

テスト的に「C:\temp」に保管した「paint.net_install.exe」(ダウンロードファイルをリネーム済)という条件で前回調べたオプションを試していきます。

まずは新規インストールからやってみます。

C:\temp\paint.net_install.exe /skipConfig /auto CHECKFORUPDATES=0

まずやってみたのは、いつもの新規インストール時の指定をコマンドラインでやってみるインストールです。
インストールディレクトリやデスクトップショートカットの生成、プログラムメニューへのショートカット配置などはデフォルトで構わないのですが、バージョンアップ(アップデート)を自動で確認する機能はOFFにしたい、というもの。(※ユーザ権限で動作する環境ではどうせアップデート実行には権限代行のような仕組みが必要なので別途手動で実行するようにするため)

オプション付きのコマンドを実行すると、自動的にインストーラがファイルを展開し、インストール作業まで自動で進行していきます。

インストールファイルの展開から始まって


インストールがここから進んで行き、


このように進み、


最終的に完了画面を表示せずインストールは完了します。
しかし、インストール自体は完了しているので、


スタートメニューには追加されたPaint.netの存在が確認出来ます。
起動してオプションが有効化を確認してみます。


オプションで「CHECKFORUPDATES=0」を指定したので、デフォルトで有効化される起動時に自動的に更新を確認するチェックボックスが無効化されています。

バージョンアップで既存の設定値を引き継いで無人インストール

今度は、バージョンアップのケースを試してみました。前回調べたように、「/skipConfig」オプションの優先順位は

  1. コマンドラインで指定した値
  2. HKLM\Software\paint.net から読み取り(インストール済の既存の設定)
  3. 既定値(インストーラのデフォルト値)

の順番で設定が決まるので、新規インストール時と同じコマンドラインでもインストールは可能ですが、今回「HKLM\Software\paint.net から読み取り」が上手く動作しているかどうかを確認するため、以下のコマンドラインでバージョンアップを実施してみました。

C:\temp\paint.net_install.exe /skipConfig /auto


コマンドを実行すると、

先ほどの新規インストールと同様に操作不要でインストールが進行していきます。バージョンが新しくなり、設定画面で


ちゃんと前のバージョンで自動更新の確認をOFFにしていた状態も引き継いでいました。

サイレントしたい⇒MSI生成

無人インストールができることは確認できたのですが、結局画面表示を抑制することはできないため、インストールは良くてもバージョンアップをバックグラウンドでユーザが意識することなく実施するというのは出来なさそう。

と、なるとやはり「/createMsi」オプションでMSIパッケージを作成して、msiexec.exeでサイレントインストールということかなと考えてMSIパッケージを生成してみました。説明では「コマンドラインで指定されたプロパティすべてが MSI パッケージにマージ」と記載があったので、必要なオプションは全部付与しておくことにします。

> paint.net_install.exe /skipConfig /auto /createMsi CHECKFORUPDATES=0

一瞬画面には「MSIパッケージを生成しています」という画面が


表示されて、最終的にデスクトップに「PaintDotNetMsi」フォルダが生成されました。


これをmsiexec.exe経由でサイレントしたらどうなるかを確認してみます。

サイレントインストール実行

とりあえず、.msiファイルが正常かどうかを画面表示込みで実行してみます。

> msiexec /i "C:\temp\PaintDotNet_x64.msi" /passive /norestart


当然ですが、「/passive」なので、進捗バーが表示されてしまいます。
「/passive」じゃなくて「/qn」でやってみることにしました。

> msiexec /i "C:\temp\PaintDotNet_x64.msi" /qn /norestart

うーん、いつものことなのですが動いているかどうかが分からない…。ひとまず放置。動作していないらしくインストールは完了しませんでした。

> msiexec /i "C:\temp\PaintDotNet_x64.msi" /quiet /norestart

変わらず、やっぱり動作していないようでインストールは完了しませんでした。

どうも/qnや/quietはUIがないことから、UAC昇格のためのプロンプトが表示できないため失敗コードを返してなにも実行せず終了してしまうような感じが。/qbや/passiveはUIがあるのでUAC動作ののちインストールが完了する、ということ。

だとすると、「管理者として実行」したコマンドプロンプトから実行すればいいということ?と思い、もう一度「管理者:コマンドプロンプト」から再度上記の"msiexec /i "C:\temp\PaintDotNet_x64.msi" /quiet /norestart"を実行してみました。


そして、しばらく待つと…


無事、サイレントでインストールが完了。なるほど、msiexec.exeでサイレントインストールするにはUACの動作がポイントになるのか。改めて発見。
後ほど
"msiexec /i "C:\temp\PaintDotNet_x64.msi" /qn /norestart"
も試してみましたが、無事サイレントインストールが動作しました。

テストは成功

まだテスト環境で確認しただけで運用環境で展開はしていませんが、なんとかPaint.netのサイレントインストールとサイレントアップデートの展開は出来そうです。

できれば動作条件となる.NET Frameworkのバージョン判定とかできたらいいかなぁなんて思い始めてきました。