[Win/VBA]インストールしたアプリケーションを確認する方法

レジストリを見てインストールアプリケーションを確認してはダメ

Windowsにインストールしたアプリケーションは、管理者権限でインストールし全てのユーザが使用できるものの他、特定のユーザだけが利用できるものがあります。

よくサンプルコードなどで、Windowsでインストールしたアプリケーションの一覧をレジストリから得るものがありますが、多くの場合レジストリとして

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\

のみを見て、インストールしたアプリケーションが得られるとしたものが多い印象があります。

しかし、このレジストリーには管理者権限で導入した一部のアプケーションのみが格納されているだけで、特定ユーザ向けにインストールしたものは格納されず、これを信じて実装するのは間違いです。

特定ユーザのみにインストールしたアプリケーションは、次のレジストリ

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall

に格納されており、少なくともこの2つのレジストリを見ないとすべてのインストールアプリケーションを確認することは出来ません。

会社のアプリケーションも上記1つしか確認しておらず、指摘が受け入れられるのに何か月もかかりました。勘弁してほしいわぁ・・

PS.そのほかにWOWなんちゃらという場所にもあるっぽい。なんじゃそりゃ。

SlenimBasicがインストールされているかどうかを確認するには

インストールソフトウェアの一覧を取得するには、レジストリーは使わないほうがよさげです。
以下はSelenium Basicがインストールされたかどうかを確認する実装例です。

'Selenium_Basicの有無
Dim seleniumBasicExisted As Boolean
    seleniumBasicExisted = False

'Selenium_Basicの有無確認
Dim itm As Variant
With CreateObject("Shell.Application").Namespace("shell:::{7b81be6a-ce2b-4676-a29e-eb907a5126c5}")
  For Each itm In .Items
    If itm.name = "Selenium Basic" Then
        seleniumBasicExisted = True
        Exit For
    End If
  Next
End With

この記事が気に入ったらサポートをしてみませんか?