共用方式為


COM+ application intermittently stops responding while reading a registry key

The COM+ application randomly stops responding. To fix the problem the COM+ application has to be restarted. After some observation the problem appeared to be with reading a custom registry key.
We were not able to read registry key while it is in use by a COM+ application. Also when we try to access the registry key using regedit we are not able to do it.

We were using RegOpenKeyEx() function to get the handle to the registry key.

Private Function GetKeyValue(ByVal KeyD As Long, ByVal Key As String, ByVal SubKey
As String) As String

Dim value As String
Dim length As Long
Dim hKey As Long

If RegOpenKeyEx(KeyD, Key, 0&, KEY_ALL_ACCESS, hKey) <> ERROR_SUCCESS Then
Err.Raise Err.Number, Err.Source, Err.Description
End If

length = 256
value = Space$(length)

If RegQueryValueEx(hKey, SubKey, 0&, 1&, ByVal value, length) <> ERROR_SUCCESS
Then
Err.Raise Err.Number, Err.Source, Err.Description
Else

value = Left$(value, length - 1)
GetKeyValue = value
End If

End Function

 

Resolution

 LONG WINAPI RegOpenKeyEx(
__in HKEY hKey,
__in LPCTSTR lpSubKey,
DWORD ulOptions,
__in REGSAM samDesired,
__out PHKEY phkResult
);

 

phkResult
A pointer to a variable that receives a handle to the opened key. If the key is not
one of the predefined registry keys, call the RegCloseKey function after you have
finished using the handle.

We were reading one of the non-predefined keys so we need to explicitly close the handle to the key.

We implemented the RegCloseKey() function to explicitly release the handle to the registry key.
<https://msdn2.microsoft.com/en-us/library/ms724837.aspx>

This resolved the issue.