Results 1 to 9 of 9

Thread: Excel crashes when working with registry [Resolved]

Threaded View

  1. #1

    Thread Starter
    New Member
    Join Date
    Dec 2000
    Posts
    15

    Resolved Excel crashes when working with registry [Resolved]

    I have a function that is below that I use to check if a dll that my Excel workbook is using is registered from the correct location. For some reason, this function causes Excel to crash. I suspect something to do with the memory overload... It just crashes with a kind offer to restart itself and try to "repair" the workbook. Can anyone help? I am really at a loss here...

    VB Code:
    1. Private Function RegisterObject(strFullName As String, strKey As String, bForce As Boolean) As Boolean
    2.    
    3.     Dim hKey As Long, stringbuffer As String, sysdir As String
    4.     Dim slength As Long, retval As Long, myTime As Single
    5.     Dim strHandle As String, strRegPath As String
    6.     Dim bPathWrong As Boolean, iSubKeyCnt As Integer, sSubKeyName As String, lSubKeyLen As Long, bSubKeyFound As Boolean
    7.     Dim lValueType As Long
    8.    
    9.     RegisterObject = False
    10.     bPathWrong = True
    11.     lValueType = REG_SZ
    12.     retval = RegOpenKeyEx(HKEY_CLASSES_ROOT, ByVal strKey & "\CLSID", 0&, KEY_READ, hKey)
    13.    
    14.     If retval = 0 Then
    15.         sSubKeyName = ""
    16.         retval = RegQueryValueEx(ByVal hKey, ByVal sSubKeyName, 0&, lValueType, ByVal strHandle, slength)
    17.         strHandle = String(slength - 1, vbNull)
    18.         retval = RegQueryValueEx(ByVal hKey, ByVal sSubKeyName, 0&, lValueType, ByVal strHandle, slength)
    19.         If retval = 0 Then
    20.             strHandle = Left(strHandle, slength)
    21.         Else
    22.             strHandle = ""
    23.         End If
    24.         retval = RegCloseKey(hKey)
    25.     End If
    26.    
    27.     If strHandle <> "" Then
    28.         sSubKeyName = "SOFTWARE\Classes\CLSID\" & strHandle & "\InprocServer32"
    29.         retval = RegOpenKeyEx(HKEY_LOCAL_MACHINE, ByVal sSubKeyName, 0&, KEY_READ, hKey)
    30.         If retval = 0 Then
    31.             sSubKeyName = ""
    32.             strRegPath = ""
    33.             retval = RegQueryValueEx(hKey, sSubKeyName, 0&, lValueType, ByVal strRegPath, slength)
    34.             strRegPath = String(slength - 1, vbNull)
    35.             retval = RegQueryValueEx(hKey, sSubKeyName, 0&, lValueType, ByVal strRegPath, slength)
    36.             If retval = 0 Then
    37.                 stringbuffer = String$(255, 0)
    38.                 slength = GetShortPathNameA(strFullName, stringbuffer, 255)
    39.                 stringbuffer = Left(stringbuffer, slength)
    40.                 If UCase(strRegPath) = UCase(stringbuffer) Then
    41.                     bPathWrong = False
    42.                 ElseIf Mid(strRegPath, 1, 2) = "\\" And InStr(1, strRegPath, Mid(stringbuffer, 3, Len(stringbuffer) - 2)) Then ' in case it is a network path
    43.                     bPathWrong = False
    44.                 End If
    45.             End If
    46.             retval = RegCloseKey(hKey)
    47.         End If
    48.     End If
    49.  
    50.     If bPathWrong Or bForce Then
    51.         stringbuffer = String$(255, 0)
    52.         slength = GetShortPathNameA(strFullName, stringbuffer, 255)
    53.         If slength > 0 Then
    54.             stringbuffer = Left(stringbuffer, slength)
    55.             sysdir = String$(255, 0)
    56.             slength = GetSystemDirectory(sysdir, 255)
    57.             sysdir = Left(sysdir, slength)
    58.             ChDrive sysdir
    59.             ChDir sysdir
    60.             retval = Shell("regsvr32.exe /s " & stringbuffer, 0)
    61.             RestoreDir
    62.             'wait for shell to finish
    63.             myTime = Timer
    64.             Do While Timer < myTime + 0.5
    65.                 DoEvents
    66.             Loop
    67.             retval = RegOpenKeyEx(HKEY_CLASSES_ROOT, strKey, 0&, KEY_READ, hKey)
    68.             If retval = 0 Then
    69.                 retval = RegCloseKey(hKey)
    70.                 RegisterObject = True
    71.             End If
    72.         End If
    73.     Else
    74.         RegisterObject = True
    75.     End If
    76.  
    77. End Function
    Last edited by Denis M; Jan 26th, 2005 at 12:24 PM.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width