• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 161
  • Last Modified:

Restart a failed program

I am running Mercury mail on my windows PC.
Occasionally it will stop running.
I need a script that I can schedule to run every 30 minutes that will:

1.  check the running processes for mercury.exe
2.  If mercury.exe is in the running processes, do nothing and go back to sleep
3.  If mercury.exe is not found in the running prcesses, restart mercury.exe (i.e. c:\mercury\mercury.exe)
4.  Rerun step 2
4.  Output actions to a log file

Any suggestions?
0
greetrufus
Asked:
greetrufus
  • 2
  • 2
1 Solution
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
You can do something like...

Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")

' launch it...
Set oExec = WshShell.Exec("calc")

Dim targetTime
targetTime = DateAdd("n", 30, Now) ' 30 minutes from now

While True
    ' check every 5 seconds to see if our targetTime has been passed
    While targetTime > Now
        WScript.Sleep 5000 ' (max is 32,767 --> approx 30 seconds)
    Wend

    ' if it's closed...run it again
    If oExec.Status <> 0 Then
        Set oExec = WshShell.Exec("calc")
    End If

    ' set next "event" for 30 minutes out...
    targetTime = DateAdd("n", 30, Now) ' 30 minutes from now
Wend
0
 
greetrufusAuthor Commented:
Any way to output the results to a log file?
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
Something like...

Const ForReading = 1, ForWriting = 2, ForAppending = 8

Dim fileName, fso, f, lines

fileName = "c:\someLog.txt"
Set fso = CreateObject("Scripting.FileSystemObject")

Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")

' launch it...
Set f = fso.OpenTextFile(fileName, ForAppending, True)
Set oExec = WshShell.Exec("calc")
f.Write(Now & " Application Started" & vbCrLf)  
f.Close

Dim targetTime
targetTime = DateAdd("n", 30, Now) ' 30 minutes from now

While True
    ' check every 5 seconds to see if our targetTime has been passed
    While targetTime > Now
        WScript.Sleep 5000 ' (max is 32,767 --> approx 30 seconds)
    Wend

    ' if it's closed...run it again
    Set f = fso.OpenTextFile(fileName, ForAppending, True)
    If oExec.Status <> 0 Then
        Set oExec = WshShell.Exec("calc")
        f.Write(Now & " Application Restarted" & vbCrLf)  
    Else
        f.Write(Now & " Application Still Alive" & vbCrLf)  
    End If
    f.Close

    ' set next "event" for 30 minutes out...
    targetTime = DateAdd("n", 30, Now) ' 30 minutes from now
Wend
 
0
 
greetrufusAuthor Commented:
How do I set the path to the executable?
it is c:\mercury\mercury.exe

Here is the code I am using that i get a path error on:
Const ForReading = 1, ForWriting = 2, ForAppending = 8

Dim fileName, fso, f, lines

fileName = "c:\Log.txt"
Set fso = CreateObject("Scripting.FileSystemObject")

Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")

' launch it...
Set f = fso.OpenTextFile(fileName, ForAppending, True)
Set oExec = WshShell.Exec("c:\mercury\mercury.exe")
f.Write(Now & " Application Started" & vbCrLf)  
f.Close

Dim targetTime
targetTime = DateAdd("n", 30, Now) ' 30 minutes from now

While True
    ' check every 5 seconds to see if our targetTime has been passed
    While targetTime > Now
        WScript.Sleep 5000 ' (max is 32,767 --> approx 30 seconds)
    Wend

    ' if it's closed...run it again
    Set f = fso.OpenTextFile(fileName, ForAppending, True)
    If oExec.Status <> 0 Then
        Set oExec = WshShell.Exec("c:\mercury\mercury.exe")
        f.Write(Now & " Application Restarted" & vbCrLf)  
    Else
        f.Write(Now & " Application Still Alive" & vbCrLf)  
    End If
    f.Close

    ' set next "event" for 30 minutes out...
    targetTime = DateAdd("n", 30, Now) ' 30 minutes from now
Wend
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Introducing Cloud Class® training courses

Tech changes fast. You can learn faster. That’s why we’re bringing professional training courses to Experts Exchange. With a subscription, you can access all the Cloud Class® courses to expand your education, prep for certifications, and get top-notch instructions.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now