Code Samples for Businesses, Schools & Developers

First Published 6 Oct 2022

This article provides code to get a list of all installed apps and program updates as displayed in the Apps section of Windows Settings

The application data is saved to a table tblInstalledApps with the following fields:
    ProgramID             AutoNumber (primary key)
    ProgramName      Short text (255 char)
    InstallLocation     Short text (255 char)
    UninstallString     Short text (255 char)

The data can be displayed in a form:

Installed Apps Form
The application data is automatically updated when the form is loaded. This normally takes no more than a second to complete.

The form can be filtered to show the details of a selected app:

Filtered Form
The code works in both 32-bit and 64-bit Access. No additional references are required

The code should be placed in a standard module


Option Compare Database
Option Explicit

Public Function GetAddRemove(sComp)

'Based on an original function by Torgeir Bakken
'Modified by Colin Riddington (Mendip Data Systems) 12/07/2021

Dim oReg As Object, sBaseKey As String, iRC As String, aSubKeys As Variant
Dim sKey, sValue, instloc, UninstallString 'variants
Dim ProgName As String, strSQL As String


      Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
            sComp & "/root/default:StdRegProv")

      sBaseKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"

      'empty existing table
      CurrentDb.Execute "DELETE * FROM tblInstalledApps", dbFailOnError

      'get registry values
      iRC = oReg.EnumKey(HKLM, sBaseKey, aSubKeys)

      'populate table
      For Each sKey In aSubKeys
            iRC = oReg.GetStringValue(HKLM, sBaseKey & sKey, "DisplayName", sValue)

            If sValue <> "" Then
                  ProgName = sValue

                  iRC = oReg.GetStringValue(HKLM, sBaseKey & sKey, "InstallLocation", sValue)
                  instloc = sValue

                  iRC = oReg.GetStringValue(HKLM, sBaseKey & sKey, "UninstallString", sValue)
                  UninstallString = sValue

                  strSQL = "INSERT INTO tblInstalledApps (ProgramName, InstallLocation, UninstallString)
                        VALUES ('" & ProgName & "','" & instloc & "', '" & UninstallString & "');"

                  CurrentDb.Execute strSQL, dbFailOnError

            End If

      'show message (optional)
      ' Dim N As Integer
      ' N = DCount("*", "tblInstalledApps")
      ' MsgBox N & " programs have been added to tblInstalledApps", vbInformation, "All done!"

End Function


Sub GetInstalledApps()
      GetAddRemove (Environ("ComputerName"))
End Sub

Run the GetInstalledApps procedure to save the list of installed apps to the table


The attached app includes all required code together with the table and form

Click to download:       Installed Apps      (ACCDB - 0.5 MB zipped)

Please use the contact form to let me know whether you found this app useful or if you have any questions.

Colin Riddington           Mendip Data Systems                 Last Updated 6 Oct 2022

Return to Code Samples Page

Return to Top