The problem we have with a corporate deployment of Acrobat Reader, was that we need to uninstall various older versions of Acrobat Reader. Normally to do this, you need to know the uninstall command string, which changes with each Acrobat Reader release. One of our senior application packagers said
Why don’t just loop though
SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
, detect Acrobat Reader in theDisplayName
key, then grab theUninstallString
.
By jove, what a clever idea.
Doing that in Visual Basic .Net proved me with an afternoon’s programming exercise. Here is the simplified result:
Dim SoftwareRegistry = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, ".")
Dim SoftwareUninstall = SoftwareRegistry.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", False)
Dim sDisplayName As String = vbEmpty
Dim sReaderUninstallString As String = vbEmpty
Dim sMSIUninstallGUID As String = vbEmpty
For Each item In SoftwareUninstall.GetSubKeyNames
'MessageBox.Show(item)
Dim SoftwareUninstallItemKey = SoftwareRegistry.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" + "\" + item, False)
sDisplayName = SoftwareUninstallItemKey.GetValue("DisplayName")
If InStr(LCase(sDisplayName), "adobe reader", CompareMethod.Text) Then
sReaderUninstallString = SoftwareUninstallItemKey.GetValue("UninstallString")
If sReaderUninstallString <> "" Then
MessageBox.Show(sMSIUninstallGUID)
End If
End If
SoftwareUninstallItemKey.Close()
Next
SoftwareUninstall.Close()
SoftwareRegistry.Close()