インストールしているアプリケーションを確認する方法は、Windowsの標準機能として提供されている。
([コントロールパネル]の[プログラムの追加と削除]のこと)

最近、ISMSの導入でライセンス違反やインストールソフトを監視することが多くなってきた。そのため、どうやって確認するのか興味を持ったので、これと同様の機能を持つプログラムをVB.NETで作成してみることにした。
このプログラムを作成するにあたり、いくつか知っておかなければならない情報がある。
 1.Windowsでインストール済みアプリケーションの情報をどうやって保持しているか
 2.VB.NETでどうやって管理情報にアクセスするか

1.インストール済みアプリケーションの管理方法
 Windowsの場合、レジストリでインストール済みアプリケーションを管理している。レジストリキーは、以下の通りである。
  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall


このサブキーに設定されている「DisplayName」または「QuietDisplayName」の値にアプリケーション名が設定されている。

2.VB.NETでレジストリを操作する方法
 以下の方法でレジストリキーの値を取得することができる。
Public Class Sample
Public Shared Sub Main()
'処理対象キー
Dim wkRegKey As RegistryKey
Dim wkKeyName As String

'操作するキーの指定
'ルートキー(HKEY_LOCAL_MACHINE\)は省略
wkKeyName = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"

wkRegKey = _
Microsoft.Win32.Registry.LocalMachine.OpenSubKey(wkKeyName, False)

'サブキーを取得する
Dim strKeyNames() As String
Dim strKeyName As String

strKeyNames = _RegKey.GetSubKeyNames()
For Each strKeyName In strKeyNames
Degub.WriteLine(strKeyName)
Next

'値を取得する
Dim strValueNames() As String
Dim strValue As String

strValueNames = _RegKey.GetValueNames()
For Each strValue In strValueNames
Debug.WriteLine(strValue)
Debug.WriteLine(wkRegKey.GetValue(strValue).ToString())
Next
End Sub
End Class

1と2の情報を上手く組み合わせることにより、アプリケーション一覧を取得するプログラムを作成することができる。