0

I've searched around for the proper way to kill a previous Instance of a VB6 application to no avail. If our main service dies, we need to terminate the previous instance of the running application and then, when the service comes back up only the new instance should be loaded. I am trying to exit this code in the following function:

Private Sub g_cServerInterface_FatalError(Error As enSvrReturns, ErrorString As String)

Dim sMsg As String
Dim result As VbMsgBoxResult

m_bFatalError = True

UnFreeze

If m_cLanguageText Is Nothing Then
    GoTo TheEnd    'Form not yet loaded - not yet logged on
End If

'    m_NumFatalErrors = m_NumFatalErrors + 1
'    If m_NumFatalErrors > 5 Then
'        Functions.DevInfo "Unable to restart Manitou.", g_cLangText_General
'        End
'    End If

If Error <> SVRERR_NOT_CONNECTED Or RunningInDebugger() Then
    sMsg = g_cLangText_General.GetText("A system error has occurred")

    If ErrorString <> "" Then
        sMsg = sMsg & ":" & vbCrLf & vbCrLf & ErrorString & vbCrLf & vbCrLf
    Else
        sMsg = sMsg & ".  "
    End If

    sMsg = sMsg & g_cLangText_General.GetText("Press OK to attempt to restart or Cancel to quit.")

    result = DevAskOkCancel(sMsg, Nothing)
Else
    ' Since we've been disconnected, attempt immediately to reconnect
    result = vbOK
End If

If (result = vbOK) Then
    On Local Error Resume Next
    If InStr(g_CommandLine, "-U") = 0 Then
        g_CommandLine = g_CommandLine & " -U" & g_cUser.id
    End If
    If InStr(g_CommandLine, "-P") = 0 Then
        g_CommandLine = g_CommandLine & " -P" & g_cUser.Password
    End If
    Shell App.Path & "\" & App.EXEName & " " & g_CommandLine & " -X", vbNormalFocus
    DoEvents
End If

TheEnd:
If (Not RunningInDebugger()) Then
    ' Running as compiled executable
    ' Specifies the exit code for the process, and for all threads that
    ' are terminated as a result of this call. Use the GetExitCodeProcess
    ' function to retrieve the process's exit value. Use the GetExitCodeThread
    ' function to retrieve a thread's exit value.

    CoUninitialize
    ExitProcess 0
Else
    ' Running from the IDE
    End
End If

End Sub

Note that I added the CoUninitialize and ExitProcess 0 API calls to this. How can I correctly terminate the previously loaded instance when the service comes back up? thanks Larry

codeg
  • 223
  • 1
  • 4
  • 20

1 Answers1

1

Private Declare Function FindWindow Lib "user32" _ Alias "FindWindowA" (ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long

Private Declare Function PostMessage Lib "user32" _ Alias "PostMessageA" (ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ lParam As Any) As Long

Private Const WM_CLOSE = &H10

Private Sub Form_Load() Dim strCap As String Dim lngHwnd As Long Dim lngRet As Long strCap = Me.Caption Me.Caption = "*" & strCap

lngHwnd = FindWindow(ByVal vbNullString, ByVal strCap)

If lngHwnd <> 0 Then PostMessage lngHwnd, WM_CLOSE, 0&, 0& End If

Me.Caption = strCap

End Sub

zersina
  • 46
  • 3