以前は無法地帯だった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」と略す。
この連載の記事
-
第460回
PC
Windowsでsftpを使う -
第459回
PC
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた -
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 - この連載の一覧へ