By accident I ran into another option: using API-calls (they are in a separate class MsiClass):
Sub Check()
Dim szPersist As New IntPtr(0)
Dim hDatabase As IntPtr
Dim szSelect As String = "SELECT Value FROM Property WHERE Property = 'ProductVersion'"
Dim hView As IntPtr
Dim hRecord As IntPtr
Dim Result As Integer
Dim szBuffer As String
Dim BufLen As Integer
Result = MsiClass.MsiOpenDatabase(MsiPath, szPersist, hDatabase)
If Result = 0 Then
Result = MsiClass.MsiDatabaseOpenView(hDatabase, szSelect, hView) 'causes the hanging network-lock
Result = MsiClass.MsiViewExecute(hView, hRecord)
Result = MsiClass.MsiViewFetch(hView, hRecord)
szBuffer = New String(CChar(" "), 250)
BufLen = szBuffer.Length
Result = MsiClass.MsiRecordGetString(hRecord, 1, szBuffer, BufLen)
InstallerVersion = Trim(Microsoft.VisualBasic.Left(szBuffer, BufLen)) & ".00000"
Result = MsiClass.MsiViewClose(hView)
Result = MsiClass.MsiCloseHandle(hDatabase)
Result = MsiClass.MsiCloseAllHandles()
End If
End Sub
The command 'Result = MsiClass.MsiCloseAllHandles()' closes the open handles and frees the network-lock.
Moderator can close this thread.