このページの本文へ

前へ 1 2 次へ

Windows Info 第209回

WindowsでのWin32アプリケーションのインストール状態を調べる方法

2020年02月02日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

以前は無法地帯だったWindowsにおけるアプリインストール

 過去の本連載で、WindowsでのUWPアプリのインストール状態を調べる方法を解説したが(「Windows 10のUWPアプリのインストール状態をコマンドラインで調べる」)、Win32アプリケーション(デスクトップアプリケーション)のインストールに関してはどうだろうか?

 少なくとも、コントロールパネルの「プログラムと機能」には、インストールされているアプリケーションのリストが表示されるのでどこかに情報が記録されていることは間違いない。また、現在では、Win32アプリケーションのインストールは、原則マイクロソフトインストーラーを使うことになっている。

コントロールパネルの「プログラムと機能」には、インストールされているWin32アプリケーションが表示される。つまり、Windowsはインストールされているアプリの情報をどこかに持っている

 昔の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つの方法は、以下のレジストリ以下を調べる方法だ。

レジストリキーの下にはサブキーがあり、これがプログラム名やIDになっていて、その下にレジストリ項目がある。ただしレジストリ項目は、必ずしもすべてのサブキーで同じではない

\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」と略す。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン