Results 1 to 10 of 10

Thread: Urgent - Detect Crash + Kill Program

  1. #1

    Thread Starter
    Fanatic Member Stevie's Avatar
    Join Date
    Mar 2000
    Location
    London, UK
    Posts
    565

    Urgent - Detect Crash + Kill Program

    I have some code which loops through all emails in a specified (outlook) folder, and copys all the attachments to my hard drive which are word documents.

    Trouble is if Outlook goes down whilst this is happening my program just freezes as Outlook is Not Responding.

    How can I detect if Outlook is Not Responding, and Kill it if it isn't responding?

    (also is there any way of simulating Outlook going down, to make testing this better than just waiting for it to go down? )
    VB6 sp5, SQL Server 2000, C#

    There are no stupid questions. Only stupid people.

  2. #2
    Registered User Nucleus's Avatar
    Join Date
    Apr 2001
    Location
    So that's what you are up to ;)
    Posts
    2,530
    If your program just freezes, I don't see how. Contrarily, if an error is thrown when Outlook keels over then you might be in luck.

    Which is it?

  3. #3

    Thread Starter
    Fanatic Member Stevie's Avatar
    Join Date
    Mar 2000
    Location
    London, UK
    Posts
    565
    My program doesn't actually freeze, it's just waiting to be able to read the next mail item, which it won't be able to do as Outlook is down.

    If I put a DoEvents in there, just before I read a mail item and somehow check if Outlook is ok I can carry on, else if it's down I can exit the loop and kill Outlook.

    Just don 't know how to do it
    VB6 sp5, SQL Server 2000, C#

    There are no stupid questions. Only stupid people.

  4. #4
    Registered User Nucleus's Avatar
    Join Date
    Apr 2001
    Location
    So that's what you are up to ;)
    Posts
    2,530
    You need to add code to restart outlook, but the code to close if the app is hung should work although untested, so you might have to fiddle. Also it assumes only one version of outlook at any one time.

    VB Code:
    1. Option Explicit
    2.  
    3.  
    4.  
    5.  
    6. Private Declare Function FindWindow& Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String)
    7. Private Declare Function SendMessageTimeout Lib "user32" Alias "SendMessageTimeoutA" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long, ByVal fuFlags As Long, ByVal uTimeout As Long, lpdwResult As Long) As Long
    8. Private Const WM_NULL = &H0
    9. Private Const SMTO_ABORTIFHUNG = &H2
    10.  
    11. Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
    12. Const PROCESS_ALL_ACCESS = &H1F0FFF
    13.  
    14. Private Declare Function TerminateProcess& Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long)
    15. Private Declare Function GetWindowThreadProcessId& Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long)
    16. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    17.  
    18.  
    19. Sub RestartOutlookIfHung()
    20. Dim lhwnd&, pid&, hp&
    21.  
    22. lhwnd = FindWindow("rctrl_renwnd32", vbNullString)
    23. If (SendMessageTimeout(lhwnd, WM_NULL, 0, 0, SMTO_ABORTIFHUNG, 10, 0) = 0) Then
    24.     GetWindowThreadProcessId lhwnd, pid
    25.     hp = OpenProcess(PROCESS_ALL_ACCESS, 0&, pid)
    26.     TerminateProcess hp&, 0&
    27.     CloseHandle hp
    28. End If
    29.  
    30. 'You add code to restart outlook here
    31. End Sub
    Last edited by Nucleus; Aug 15th, 2001 at 05:53 PM.

  5. #5

    Thread Starter
    Fanatic Member Stevie's Avatar
    Join Date
    Mar 2000
    Location
    London, UK
    Posts
    565

    Thumbs up

    Cheers

    I'll try it out this afternoon.
    VB6 sp5, SQL Server 2000, C#

    There are no stupid questions. Only stupid people.

  6. #6

    Thread Starter
    Fanatic Member Stevie's Avatar
    Join Date
    Mar 2000
    Location
    London, UK
    Posts
    565
    Just got round to trying this, this morning.

    Can you tell me how the code in red should be dim'd?

    Code:
    Dim lhwnd&, pid&, hp&
    
      lhwnd = FindWindow("rctrl_renwnd32", vbNullString)
    
      If (SendMessageTimeout(lhwnd, WM_NULL, 0, 0, SMTO_ABORTIFHUNG, 10, 0) = 0) Then
    
        GetWindowThreadProcessId hwnds(lcount) , pid
        hp = OpenProcess(PROCESS_ALL_ACCESS, 0&, pid)
        TerminateProcess hp&, 0&
        CloseHandle hp
    
      End If
    VB6 sp5, SQL Server 2000, C#

    There are no stupid questions. Only stupid people.

  7. #7
    Registered User Nucleus's Avatar
    Join Date
    Apr 2001
    Location
    So that's what you are up to ;)
    Posts
    2,530
    I edited the post, try the edited code.

  8. #8

    Thread Starter
    Fanatic Member Stevie's Avatar
    Join Date
    Mar 2000
    Location
    London, UK
    Posts
    565
    Cheers (again)
    VB6 sp5, SQL Server 2000, C#

    There are no stupid questions. Only stupid people.

  9. #9
    Registered User Nucleus's Avatar
    Join Date
    Apr 2001
    Location
    So that's what you are up to ;)
    Posts
    2,530
    I take it worked?

  10. #10

    Thread Starter
    Fanatic Member Stevie's Avatar
    Join Date
    Mar 2000
    Location
    London, UK
    Posts
    565
    It compiles!

    I won't be able to tell until later on today, as I can't get access to a specific mailbox at the moment.

    I will let you know how it goes, as soon as I've been able to test it.
    VB6 sp5, SQL Server 2000, C#

    There are no stupid questions. Only stupid people.

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