Kae Travis

Deleting a registry value in an MSI database (Modify method)

This blog entry provides an example of deleting a registry value in an MSI database using the Modify method and VBScript.  It follows on from the previous blog post which provided a tutorial on uddating a primary key in an MSI database using the Modify method and VBScript.

It forms part 8 of an 17-part series that explores how to use VBScript to manipulate MSI relational databases using the Windows Installer API.  Throughout this series of tutorials, we identify the common issues that we encounter and the best practises that we use to overcome them.

Taking our script from previous tutorials, we first need to search for the record we want to delete and then we can simple replace msiViewModifyUpdate with msiViewModifyDelete:

'create 2 constants - one for when we want to just query the MSI (read) and one for when we want to make changes (write)

Const msiOpenDatabaseModeReadOnly = 0
Const msiOpenDatabaseModeTransact = 1

Const msiViewModifyInsert = 1
Const msiViewModifyUpdate = 2
Const msiViewModifyDelete = 6
Const msiViewModifyReplace = 4

'create WindowsInstaller.Installer object
Dim oInstaller : Set oInstaller = CreateObject("WindowsInstaller.Installer")

'open the MSI (the first argument supplied to the vbscript)
Dim oDatabase : Set oDatabase = oInstaller.OpenDatabase(WScript.Arguments(0),msiOpenDatabaseModeTransact) 

Dim sql : sql = "SELECT `Registry` FROM `Registry` WHERE `Registry` = 'SampleReg'"
'create a view of the registry we want to see
Dim regView : Set regView = oDatabase.OpenView(sql)

'execute the query
regView.Execute 

'fetch the first row of data (if there is one!)
Dim regRecord : Set regRecord = regView.Fetch

'whilst we've returned a row and therefore regRecord is not Nothing
While Not regRecord Is Nothing

	regView.Modify msiViewModifyDelete, regRecord 'go and fetch the next row of data Set regRecord = regView.Fetch Wend oDatabase.Commit regView.Close Set regView = Nothing Set regRecord = Nothing Set oDatabase = Nothing Set oInstaller = Nothing

Thanks for reading about deleting a registry value in an MSI database using the Modify method.  Next you can find out how to insert a registry value in an MSI database using the Modify method and VBScript.

Deleting a registry value in an MSI database (Modify method)
Deleting a registry value in an MSI database (Modify method)

Leave a Reply