以前は無法地帯だったWindowsにおけるアプリインストール
過去の本連載で、WindowsでのUWPアプリのインストール状態を調べる方法を解説したが(「Windows 10のUWPアプリのインストール状態をコマンドラインで調べる」)、Win32アプリケーション(デスクトップアプリケーション)のインストールに関してはどうだろうか?
少なくとも、コントロールパネルの「プログラムと機能」には、インストールされているアプリケーションのリストが表示されるのでどこかに情報が記録されていることは間違いない。また、現在では、Win32アプリケーションのインストールは、原則マイクロソフトインストーラーを使うことになっている。
昔のWindowsでは、アプリケーションが個別にインストーラーを持っており、アンインストール処理なども同様で、一種の無法地帯になっていた。しかし現在では、正しい方法を使わないとアプリのインストールができないようになっている。とはいえ例外もあり、単に実行ファイルをコピーすれば動くという場合、インストール作業が不要で、Windows自体もこれを管理しない。
でもまったく管理しないのではなく、以前紹介したように、インターネットからダウンロードした実行ファイルに関しては、実行ファイルに「代替データストリーム」でZone.Identifierという情報が付けられ、実行前に警告できるようにはなっている(「インターネットからダウンロードしたファイルはZone.Identifierでセキュリティ管理をする」)。
インストール状態を調べる方法について探ってみた
具体的にインストール状態を調べる方法があるか、まずはググってみたが、とりあえずマイクロソフトのウェブサイトに以下のようなページがあった。
●ソフトウェア インストールの操作
 https://docs.microsoft.com/ja-jp/powershell/scripting/samples/working-with-software-installations?view=powershell-7
このページによれば、2つの方法でインストールしたWin32アプリケーションのリストを得ることができるという。1つは、WMI(Windows Management Instrumentation)を使う方法で、もう1つはレジストリを見る方法である。前者は、PowerShellから
Get-CimInstance -Class Win32_Product
というコマンドを使う。
なお、Cim(Common Information Model)は、WIMの元になった仕様の名称で、最近はこちらを使うようだ。PowerShellにも「Get-WmiObject」というコマンドレットがあったのだが、このようなWmiという名称を使うコマンドに対して、Cimという名称を持つ新しいコマンドが作られた。
機能的にはほとんど同じだが、Cim系コマンドのほうが後から作られたため、改良が加えられている。もちろん、手慣れているならWmi系のコマンドを使ってもかまわない。
もう1つの方法は、以下のレジストリ以下を調べる方法だ。
\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
とりあえずマイクロソフトが主張する公式の方法なので、この2つで得られた情報を見てみたが、どうも見当たらないアプリケーションがいくつかある。コントロールパネルのプログラムと機能には表示されるのに、前記2つから得られたオブジェクトには、該当のアプリが見当たらないのである。これは、何かが足らないのだと思われる。
しかし、前者はWmiなので、細かく調べるわけにもいかない。実際にはWmiの下でWin32APIが動作しているのだが、機械語コードの中なので、簡単に見るというわけにもいかないのである。
そこでレジストリのほうをもう少し探してみることにした。まずは「Uninstall」というキーをレジストリ中から検索した。そして見つかったもののうち、前記レジストリとは中身が違いそうなキーとして、以下の2つがあった。
\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall 
これ以外にも、いくつか「Uninstall」キーを持つレジストリ項目があったのだが、中身を見た感じ、上記3つのキーとは雰囲気が違っていたり、サブキーが何もなったり、などどうも違う感じがする。そんなわけで、まずはWMIとレジストリ3つの情報を合わせて、インストールされているアプリケーションの情報を取り出して見ることにした。
以下、話を簡単にするため、前記3つのレジストリをそれぞれ順に「HKLM」「WOW」「HKCU」と略す。
この連載の記事
- 第210回 プレビュー版でグラフ作成機能も付いたWindows 10標準の電卓アプリ
- 第208回 Chromeと同じエンジンのEdge正式版が登場するも移行する強い理由もない
- 第207回 かなり使いやすくなりそうな新コンソール「Windows Terminal」がv0.8に
- 第206回 最新Previewで生じたWindows 10のカーネルの変化を調べる
- 第205回 マイクロソフトはWindows 10とスマホの連携を強化 MacとiPhoneの関係になれるか?
- 第204回 Windowsの再起動とその原因をイベントログから探る
- 第203回 WindowsイベントログをPowerShellを用いて扱う
- 第202回 Windowsで発生したことを確認できるWindowsイベントログを解説する
- 第201回 完成が近づいてきたWindows 10 20H1とともに、Windows Insider Programも変わる
- 第200回 正式版に向け仕様が固まりつつある新コンソール「Windows Terminal」
- この連載の一覧へ